Cod sursa(job #2540635)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 7 februarie 2020 13:32:17
Problema Nivele Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5;
    const int mod=1e9+7;
    const int MX=(1<<20);
    int c[2*N];
    int tv[N];
    int main()
    {
    	tv[0]=1;
    	for(int i=1;i<N;i++)
    		tv[i]=(2*tv[i-1])%mod;
    	//tv[0]=0;
    	int n;
    	cin >> n;
    	int x;
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&x);
    		c[x]++;
    	}
    	for(int k=1;k<MX;k*=2)
    		for(int i=0;i<N;i++)
    			if((i&k)==0)
    				c[i]+=c[i+k];
    	int ans=0;
    	for(int i=0;i<MX;i++)
    	{
    		ans=(ans+(__builtin_popcount(i)%2==1?-1:1)*tv[c[i]]);
    		ans+=mod*(ans<0);
    		ans%=mod;
    		//cout<<i<<" : "<<c[i]<<" "<<tv[c[i]]<<endl;
    	}
    	cout<<ans;
    	return 0;
    }