hdu6085 手写bitset
来源:互联网 发布:神舟软件科技有限公司 编辑:程序博客网 时间:2024/05/29 07:38
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;typedef unsigned long long ull;const int maxn=50005;struct Bitset{ ull bit[1565];//开两倍的空间,50000/64*2 void reset() { memset(bit,0,sizeof(bit)); } void flip(int pos) { bit[pos>>6]^=(ull)1<<(pos&63); } bool judge(int pos) { return bit[pos>>6]&((ull)1<<(pos&63)); }}a,ans;int b[maxn];ull pre[64];void init(){ pre[0]=1; for(int i=1;i<64;i++) pre[i]=pre[i-1]|((ull)1<<i);}int main(){ int t,n,m,q,i,j,mx; init(); scanf("%d",&t); while(t--&&scanf("%d%d%d",&n,&m,&q)!=EOF) { a.reset(); ans.reset(); mx=0; for(i=0;i<n;i++) { int tp; scanf("%d",&tp); mx=max(mx,tp); a.flip(tp); } for(i=0;i<m;i++) { scanf("%d",b+i); for(j=0;j*b[i]<=mx;j++) { int ind1=(j*b[i])>>6,pos1=(j*b[i])&63,ind2=(j*b[i]+b[i]-1)>>6,pos2=(j*b[i]+b[i]-1)&63;//哈希 ull temp; if(ind1==ind2)//分为三段 { temp=a.bit[ind1]>>pos1; temp&=pre[pos2-pos1]; ans.bit[0]^=temp; } else { int nowind=0,nowpos=63-pos1; temp=a.bit[ind1]>>pos1; temp&=pre[nowpos]; ans.bit[0]^=temp; if(pos1==0) for(int k=ind1+1;k<ind2;k++) ans.bit[++nowind]^=a.bit[k]; else for(int k=ind1+1;k<ind2;k++) { temp=a.bit[k]<<(nowpos+1); ans.bit[nowind++]^=temp; temp=a.bit[k]>>pos1; temp&=pre[nowpos]; ans.bit[nowind]^=temp; } if(pos1==0) ans.bit[++nowind]^=a.bit[ind2]&pre[pos2]; else if(pos2<pos1) { temp=a.bit[ind2]&pre[pos2]; temp<<=(nowpos+1); ans.bit[nowind]^=temp; } else { temp=a.bit[ind2]<<(nowpos+1); ans.bit[nowind++]^=temp; temp=a.bit[ind2]>>pos1; temp&=pre[pos2-pos1]; ans.bit[nowind]^=temp; } } } } for(i=0;i<q;i++) { int tp; scanf("%d",&tp); if(ans.judge(tp)) printf("1\n"); else printf("0\n"); } } return 0;}
阅读全文
0 0
- hdu6085 手写bitset
- hdu6085 Rikka with Candies [bitset+想法]
- Rikka with Candies(HDU6085) (bitset加速计数)
- [压位 手写bitset] BZOJ 2628 JZPSTR
- hdu6085 Rikka with Candies
- HDU6085-Rikka with Candies
- bitset
- bitset
- BitSet
- bitset
- bitset
- BitSet
- bitset
- bitset
- bitset
- bitset
- bitset
- BitSet
- 如何学习正则表达式(校验网址)
- hods--2000
- CodeForces
- 大暑假集训 第二阶段
- eclipse中中文乱码
- hdu6085 手写bitset
- bootstrap-datetimepicker精确到年、月、天、小时、分钟
- python模块下载网址
- swagger nginx 代理出现 no content问题
- HDU
- matlab写入txt、excel 以及关于图的处理
- LeetCode 290 word pattern 的一点疑惑
- groupadd newgrp groupdel 命令
- Java:String和Date、Timestamp之间的转换