【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=6085

【题目大意】

  给出一个数组a一个数组b,以及询问数组c,
  问对于每个c有多少对a%b=c,答案对2取模

【题解】

  考虑对2取模我们发现答案等价于数字的xor,01状态可以用bitset保存,
  在bitset上存a的权值数组,那么每次只要将b*i~b*(i+1)-1的数值xor到答案数组的0~b-1上去即可,
  鉴于bitset没有截取区间的功能,我们手写压位,
  考虑压32位之后不是32倍数的部分截取起来非常尴尬,
  因此我们保存其偏移量为0~31的数组,这样取区间就比较方便了。

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=10010;
struct Bitset{
unsigned int u[N];
void reset(){memset(u,0,sizeof(u));}
void set(int x){u[x>>5]|=1<<(x&31);}
void flip(int x){u[x>>5]^=1<<(x&31);}
bool test(int x){return u[x>>5]&(1<<(x&31));}
void reset(int x){if(test(x))flip(x);}
}a[32],ans;
void Solve(int l,int r){
while((r-l)&31){r--;if(a[0].test(r))ans.flip(r-l);}
int m=0; while(l&31)l++,r++,m++;
l>>=5; r>>=5;
for(int i=l;i<r;i++)ans.u[i-l]^=a[m].u[i];
}
int T,n,m,q,x,mx;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&q);
for(int i=0;i<32;i++)a[i].reset();
ans.reset(); mx=0;
for(int i=1;i<=n;i++){
scanf("%d",&x); mx=max(x,mx);
for(int j=0;j<32;j++)a[j].set(x+j);
}
for(int i=1;i<=m;i++){
scanf("%d",&x);
for(int j=0;j<=mx;j+=x)Solve(j,min(mx+1,j+x));
}
while(q--){
scanf("%d",&x);
if(ans.test(x))puts("1");
else puts("0");
}
}return 0;
}

HDU 6085 Rikka with Candies(bitset)的更多相关文章

  1. 2017ACM暑期多校联合训练 - Team 5 1001 HDU 6085 Rikka with Candies (模拟)

    题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...

  2. HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5

    看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...

  3. 2017多校第5场 HDU 6085 Rikka with Candies bitset

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6085 题意:存在两个长度为n,m的数组A,B.有q个询问,每个询问有一个数字k,可以得到Ai%Bj=k ...

  4. hdu 5423 Rikka with Tree(dfs)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  5. hdu 5631 Rikka with Graph(图)

    n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i ...

  6. hdu 6085 Rikka with Candies (set计数)

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  7. hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002

    题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1.  定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2.  对于树A与树B,如 ...

  8. HDU 6126 Give out candies(网络流)

    题目给出n,m,k 然后给出n*m的矩阵a[i][j]代表第i个人在获得j 颗糖果能得到的满足值, 然后k是k行每行输入三个整数x,y,z     ,x,y,z表示一组限制表示第x个人分到的糖数减去第 ...

  9. HDU 6092 Rikka with Subset(dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=6092 题意: 给出两个数组A和B,A数组一共可以有(1<<n)种不同的集合组合,B中则记录了每个数出 ...

随机推荐

  1. 【BZOJ】2565: 最长双回文串

    [题意]给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5. [算法]回文树 [题解]对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚 ...

  2. img图片居中

    关键词:clear: both;    display: block;    margin:auto; 图片居左,居右,居中: /* Alignment */ .alignleft { display ...

  3. 【译】DTD - Entities

    原文:DTD - Entities 实体用于定义XML文档中特殊字符的快捷方式. 实体主要有四种类型: 内置实体(Built-in entities) 字符实体(Character entities) ...

  4. 【转】CentOS7 yum方式配置LAMP环境

    采用Yum方式搭建: Apache+Mysql+PHP环境 原文地址: http://www.cnblogs.com/zutbaz/p/4420791.html 1.安装Apache yum inst ...

  5. koa源码阅读[1]-koa与koa-compose

    接上次挖的坑,对koa2.x相关的源码进行分析 第一篇.不得不说,koa是一个很轻量.很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰. express和koa同为一批人 ...

  6. redhat5.5 x64 安装oracle 11g

    http://www.cnblogs.com/jamesf/p/4769086.html http://blog.csdn.net/yakson/article/details/9012129

  7. perl6正则 5: [ ] / | / ||

    也就是可以把多种要匹配的写进[ ] 中, 第种用 | 分开就行了. | 与 || 有差别 |的话, 当匹配位置 相同时, 会取最长的, 而 || , 当前面的匹配成功, 后面的就不会再去匹配. / / ...

  8. Gym 101081K Pope's work

    题目链接:Gym - 101081K 题意:给n个箱子,每个箱子有一个重量W和一个承重R,表示它上面能放最多R-W的重量.问最多能把多少箱子堆到一堆. 思路:发现在一堆箱子里,两个箱子交换位置,对其他 ...

  9. oracle只要第一条数据SQL

    select * from ( select * from COMMON_BIZREL_WF where sponsor is not null order by serialid ) where r ...

  10. vsftpd.conf 详解

    //不允许匿名访问 anonymous_enable=NO //设定本地用户可以访问.注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问 local_enable=YES // ...