HDU 6085 Rikka with Candies(bitset)
【题目链接】 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)的更多相关文章
- 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 ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
- 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 ...
- hdu 5423 Rikka with Tree(dfs)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hdu 5631 Rikka with Graph(图)
n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i ...
- hdu 6085 Rikka with Candies (set计数)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hdu 5423 Rikka with Tree(dfs)bestcoder #53 div2 1002
题意: 输入一棵树,判断这棵树在以节点1为根节点时,是否是一棵特殊的树. 相关定义: 1. 定义f[A, i]为树A上节点i到节点1的距离,父节点与子节点之间的距离为1. 2. 对于树A与树B,如 ...
- HDU 6126 Give out candies(网络流)
题目给出n,m,k 然后给出n*m的矩阵a[i][j]代表第i个人在获得j 颗糖果能得到的满足值, 然后k是k行每行输入三个整数x,y,z ,x,y,z表示一组限制表示第x个人分到的糖数减去第 ...
- HDU 6092 Rikka with Subset(dp)
http://acm.hdu.edu.cn/showproblem.php?pid=6092 题意: 给出两个数组A和B,A数组一共可以有(1<<n)种不同的集合组合,B中则记录了每个数出 ...
随机推荐
- 我的Mac使用笔记
此篇记录mac使用相关的一些东西,不断更新中... 1.Mac 安装homebrew : https://brew.sh/index_zh-cn.html /usr/bin/ruby -e " ...
- thinkphp crud实例代码
class IndexAction extends Action { // 查询数据 public function index() { $Form = M("Form"); $l ...
- python基础===如何在列表,字典,集合中根据条件筛选数据
#常见的操作如下: data = [1, 5, -3, -2, 6, 0, 9] res = [] for x in data: if x>=0: res.append(x) print(res ...
- Swift中的指针类型
Swift编程语言为了能与Objective-C与C语言兼容,而引入了指针类型.尽管官方不建议频繁使用指针类型,但很多时候,使用指针能完成更多.更灵活的任务.比如,我们要实现一个交换两个整数值的函数的 ...
- caffe Python API 之Accuracy
net.acc = caffe.layers.Accuracy(net.fc3,net.label) 输出: layer { name: "acc" type: "Acc ...
- java在图片上写字
- C# 下载文件的四种方法
C# 文件下载四方法 - CSDN论坛 - CSDN.NET using System; using System.Data; using System.Configuration; using Sy ...
- sshd_config OpenSSH SSH 进程配置文件配置说明
名称 sshd_config – OpenSSH SSH 服务器守护进程配置文件 大纲 /etc/ssh/sshd_config 描述sshd 默认从 /etc/ssh/sshd_config 文件( ...
- HDU 2859 Phalanx(二维DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 题目大意:对称矩阵是这样的矩阵,它由“左下到右”线对称. 相应位置的元素应该相同. 例如,这里是 ...
- 如何使用OpenSSL工具生成根证书与应用证书
如何使用OpenSSL工具生成根证书与应用证书 一.步骤简记 // 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认) openssl req -new -x509 -d ...