题解:P12137 [蓝桥杯 2025 省 B] 装修报价
Ay2024_4202yA · · 题解
思路
题目中有加、减和异或三种运算。
注意到除去开头的数,后面的加减符号换一下两者相加会抵消很多东西。
假设我们把开头
所以我们枚举
吗?
注意到,第
所以这一位只有加减两种情况。
所以对于固定的
注意,当
还有随时注意取模!
AC code
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+5,mod=1e9+7;
int n,a[maxn],p3[maxn];
signed main(){
int n;cin>>n;p3[0]=1;
for(int i=1;i<=n;i++)p3[i]=p3[i-1]*3%mod;
for(int i=1;i<=n;i++)cin>>a[i];
int xr=0,ans=0;
for(int i=1;i<n;i++){
xr^=a[i];ans=(ans+xr*p3[n-i-1]%mod*2%mod)%mod;
}
xr^=a[n];ans=(ans+xr)%mod;
cout<<ans<<endl;
return 0;
}