449D - Jzzhu and Numbers - CodeForces Solution


bitmasks combinatorics dp *2400

Please click on ads to support us..

C++ Code:

#include<bits/stdc++.h>
using namespace std;
using INT = long long;
const int NN = 1e6 + 100;
int dp[NN][21],a[NN],p[NN];
int main() {
#ifndef ONLINE_JUDGE
	freopen("in.in", "r", stdin);
#endif
	  int n,mod=1000000007;
	  cin>>n;
	  for(int i=1;i<=n;i++) scanf("%d",a+i),dp[a[i]][0]++;
	  for(int j=1;j<=20;j++){
	  	for(int i=0;i<NN;i++){
			dp[i][j]=dp[i][j-1];
	  		if(i&(1<<j-1)) continue;
	  		if(i+(1<<j-1)<NN) dp[i][j]+=dp[i+(1<<j-1)][j-1];
		  }
	  }
	  p[0]=1;
	  for(int i=1;i<NN;i++) p[i]=p[i-1]*2%mod;
	  int ans=0;
	  for(int i=0;i<NN;i++){
	  	int id=p[dp[i][20]]-1;
	  	int k=__builtin_popcount(i);
	  	if((k%2)) id=mod-id;
	  	ans=(ans+id)%mod;
	  }
	  printf("%d\n",ans);
	  
	return 0;
}


Comments

Submit
0 Comments
More Questions

545B - Equidistant String
1244C - The Football Season
1696B - NIT Destroys the Universe
1674A - Number Transformation
1244E - Minimizing Difference
1688A - Cirno's Perfect Bitmasks Classroom
219A - k-String
952A - Quirky Quantifiers
451B - Sort the Array
1505H - L BREAK into program
171E - MYSTERIOUS LANGUAGE
630D - Hexagons
1690D - Black and White Stripe
1688D - The Enchanted Forest
1674C - Infinite Replacement
712A - Memory and Crow
1676C - Most Similar Words
1681A - Game with Cards
151C - Win or Freeze
1585A - Life of a Flower
1662A - Organizing SWERC
466C - Number of Ways
1146A - Love "A"
1618D - Array and Operations
1255A - Changing Volume
1710C - XOR Triangle
415C - Mashmokh and Numbers
8A - Train and Peter
591A - Wizards' Duel
1703G - Good Key Bad Key