\(\_\_stdcall\)大佬出的题\(Orz\)
我们惊奇地发现,加入\(\_\_popcount(x)\)和\(\_\_popcount(y)\)的奇偶数性相同,那么\(\_\_popcount(x xor y)\)一定是偶数。
因为假如\(x\),\(y\)有\(i\)位相同,那么\(\_\_popcount(x xor y)=\_\_popcount(x)+\_\_popcount(y)-i×2\),一定是偶数。
否则就是奇数。
然后统计一下奇数偶数的个数乘一下就行了。
理论上是过不了的,但是由于数据随机构造,轻易水过去了。。。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
unsigned long long a,b,c,d,x;
int cnt[2],n;
int main() {
cin>>n>>a>>b>>c>>d>>x;
for(int i=1;i<=n;i++)
x=(((a*x+b)%d)*x+c)%d,cnt[__builtin_popcount(x)&1]++;
cout<<1ll*cnt[0]*cnt[1];
return 0;
}