题解:P12137 [蓝桥杯 2025 省 B] 装修报价
思路
注意题目求的是每种情况的和。
再观察题目不难可以发现
枚举一下样例不难发现规律。
5+2+0
5-2-0
5+2-0
5-2+0
5+2^0
5-2^0
5^2+0
5^2-0
5^2^0
再用一个前缀异或维护即可。
另外,膜拜掰掰手指大佬。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int read()
{
int res = 0,f = 1;
char ch = getchar();
while (ch<'0'||ch>'9') f = (ch=='-'?-f:f),ch = getchar();
while (ch>='0'&&ch<='9') res = (res<<3)+(res<<1)+(ch^48),ch = getchar();
return res*f;
}
void write(int x)
{
if (x<0) putchar('-'),x=-x;
if (x>9) write(x/10);
putchar(x%10+'0');
}
void writech(int x,char ch){write(x),putchar(ch);}
const int N = 1e5+5,MOD = 1e9+7;
int n;
int a[N];
int p3[N];
signed main()
{
n=read();
for (int i = 1; i <= n; i++) a[i]=read();
p3[0]=1;
for (int i = 1; i <= n; i++) p3[i]=p3[i-1]*3%MOD;
// 掰掰手指
int ans = 0,sum = 0;
for (int i = 1; i <= n; i++)
{
sum^=a[i];
ans+=sum*(p3[n-i-1]*2)%MOD;
ans%=MOD;
}
ans=(ans+sum)%MOD;
write(ans);
return 0;
}
/*
5+2+0
5-2-0
5+2-0
5-2+0
5+2^0
5-2^0
5^2+0
5^2-0
5^2^0
*/