登录—专业IT笔试面试备考平台_牛客网
思路:
#include
using 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<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)