登录—专业IT笔试面试备考平台_牛客网
思路:
#includeusing namespace std; const int N=200010,mod=1e9+7; typedef long long ll; ll a[N]; ll ksm(ll a,ll b)//模板; { ll res=1; while(b) { if(b&1)res=res*a%mod; b>>=1; a=(ll)a*a%mod; } return res; } int main() { ll n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } ll ans=0; for(int i=1;i<=n;i++)//枚举每一个位置; { int t=i*2; if(t>n)break;//没有与当前位置相同的生日;一个人生日; int k=a[i]^a[t]; if(t==n)ans=(ans+k*ksm(2,n-2)%mod)%mod;//如果只有两个人生日相同; if(i*2+1<=n)//讨论四种异或情况;//三个人生日相同; { ans=(ans+k*ksm(2,n-3)%mod)%mod; k=a[i]^a[t+1]; ans=(ans+k*ksm(2,n-3)%mod)%mod; k=a[i]^a[t+1]^a[t]; ans=(ans+k*ksm(2,n-3)%mod)%mod; k=a[t+1]^a[t]; ans=(ans+k*ksm(2,n-3)%mod)%mod; } } cout<



