[Hackrank] Prime XOR (计数DP)
来源:互联网 发布:hp扫描仪软件 编辑:程序博客网 时间:2024/05/29 18:48
Hackrank - Prime XOR
给定N个数,求有多少个不同子集的异或和为质数
其中N≤105,3500≤ai≤4500
首先异或和不会超过
然后虽然
所以总的不同的数不会很多
所以做法是枚举每种数取了多少个,然后暴力转移即可
刚开始我枚举的部分用的是组合数,但这是不对的
因为他要求不同子集,所以只要个数一定就不管他是从哪个位置取的
所以只要统计出每种数取奇数个的取法和取偶数个的取法转移即可
#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>#include <cctype>#include <map>#include <set>#include <queue>#include <bitset>#include <string>#include <cassert>#include <complex>using namespace std;typedef pair<int,int> Pii;typedef long long LL;typedef unsigned long long ULL;typedef double DBL;typedef long double LDBL;#define MST(a,b) memset(a,b,sizeof(a))#define CLR(a) MST(a,0)#define SQR(a) ((a)*(a))#define PCUT puts("\n----------")#define PRI(x) cout << #x << ": " << (x) << endl#define PPR(x,y) cout << #x << " " << #y << ": " << (x) << " " << (y) << endlconst int maxn=1e5+5, maxi=4500+5, MOD=1e9+7, maxv=1<<13;int N;int in[maxi];LL dp[2][maxv];bool sieve[maxv];int main(){ #ifdef LOCAL freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout); #endif for(int i=2; i<maxv; i++) if(!sieve[i]) for(int j=i*i; j<maxv; j+=i) sieve[j]=1; int T; scanf("%d", &T); for(int ck=1; ck<=T; ck++) { scanf("%d", &N); CLR(in); for(int i=1,x; i<=N; i++) { scanf("%d", &x); in[x]++; } CLR(dp); int now=0,las=1; dp[now][0] = 1; for(int i=3500; i<=4500; i++) if(in[i]) { now^=1; las^=1; CLR(dp[now]); for(int j=0; j<maxv; j++) { dp[now][j] = ( dp[now][j] + (in[i]/2+1)*dp[las][j]%MOD)%MOD; dp[now][j^i] = ( dp[now][j^i] + ((in[i]-1)/2+1)*dp[las][j]%MOD)%MOD; } } LL ans=0; for(int i=2; i<maxv; i++) if(!sieve[i] && dp[now][i]) { ans = (ans+dp[now][i])%MOD;// if(dp[now][i]) printf("%d %lld\n", i, dp[now][i]); } printf("%lld\n", ans); } return 0;}
阅读全文
0 0
- [Hackrank] Prime XOR (计数DP)
- hdu5116(dp + 计数)
- HDU4055 (dp计数)
- bzoj3193(计数dp)
- hdu5845 Best Division (xor-trie+dp)
- poj1037(dP+排列计数)
- HDU6078Wavel Sequence(计数dp)
- HDU5000 Clone(计数dp)
- DP计数
- dp计数
- 计数DP
- 计数dp
- 计数DP
- [HDU 5845] Best Division (xor-trie+dp)
- HDU 5715 XOR 游戏(二分+dp+01字典树)
- [BZOJ2337][HNOI2011]XOR和路径(概率期望dp+高斯消元)
- CF766E:Mahmoud and a xor trip(树形dp)
- 洛谷 P3211 [HNOI2011]XOR和路径(推dp+高斯消元)
- 南阳理工16题
- opencv3_java 图像上加水印TextOnImg Rect
- Lesson 22 A glass envolops
- 优酷真实视频地址获取方法
- 是时候重构数据访问层的代码了
- [Hackrank] Prime XOR (计数DP)
- 二、计算机的神经网络系统-操作系统
- PHP中定界符的使用注意事项
- SprringMV数据格式化注解
- 南阳理工17题
- 区块链开发专题(P2P技术如何验证消息)
- Linux新手入门:通过chmod改变文件权限
- 一、认识计算机
- PHP实现Unicode和Utf-8编码相互转换