我谔谔
查看原帖
我谔谔
455558
Imiya楼主2022/7/10 19:18

为什么子任务三中的两个点输出了负数qwq

#include<iostream>
using namespace std;
#define int long long
const int P=0x100000000;
inline int read(){
	int r=0,i=getchar();
	while(i<'0'||i>'9')i=getchar();
	while(i>='0'&&i<='9')r=(r<<1)+(r<<3)+(i^48),i=getchar();
	return r;
}
int a0[50],a1[50],n,ans;
void init(){
	cin>>n;
	for(int i=0;i<40;i++)a0[i]=n;
	for(int i=1;i<=n;i++){
		int k=read();
		for(int j=0;k;k>>=1,j++)a0[j]-=k&1,a1[j]+=(k&1);
	}
}
inline int f(int x,int y){
	while(y)x=x*2%P,y--;
	return x;
}
signed main(){
	cout<<P;
	init();
	for(int i=0;i<=40;i++){
		if(!a0[i]||!a1[i])continue;
		int p10=a0[i]*a0[i]%P;
		int p11=(a1[i]*a1[i]%P+2*a1[i]*a0[i]%P)%P;
		int p20=(a0[i]*a0[i]%P+2*a1[i]*a0[i]%P)%P;
		int p21=a1[i]*a1[i]%P;
		ans=(ans+f(p10*p21%P+p11*p20%P,i))%P;
	}
	cout<<ans;
	return 0;
}
2022/7/10 19:18
加载中...