[LUOGU]4932 浏览器

\(\_\_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;
}
posted @ 2018-10-22 11:44  SWHsz  阅读(149)  评论(0编辑  收藏  举报