/*hdu6085[压位+暴力] 2017多校5*/
/*强行优化..*/
#include <bits/stdc++.h>
using namespace std;
struct bits{
unsigned num[];
unsigned bitlen;
bits(){memset(num,,sizeof(num)),bitlen=;}
bits get(int l, int r) {
bits ret;
int length=r-l+;
int left,len1,len2,pos=;
left=l/;
len1=(l%);
len2=-len1;
while(length>){
if(len2==) ret.num[pos++]=num[left];
else ret.num[pos++]=(num[left]>>len1)|(num[left+]<<len2);
left++;
length-=;
}
pos--;
if(length<){
ret.num[pos]<<=(-length);
ret.num[pos]>>=(-length);
}
ret.bitlen=pos+;
return ret;
}
void add(int p) {
int next=p/;
int move=p%;
num[next]|=(<<move);
}
void show(int p){
int next=p/;
int move=p%;
printf("%d",(num[next]&(<<move))?:);
}
};
void Xor(bits& a,bits& b){
for(int i=;i<(int)b.bitlen;i++){
a.num[i]^=b.num[i];
}
}
int T,n,m,q,b[];
void solve(){
int temp,maxA=;
bits A,B,ans;
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<n;i++){
scanf("%d",&temp);
A.add(temp);
maxA=max(temp,maxA);
}
for(int i=;i<m;i++){
scanf("%d",&temp);
for(int k=;;k++){
if(((k+)*temp-)>maxA){
B=A.get(k*temp,maxA);
Xor(ans,B);
break;
}
else B=A.get(k*temp,(k+)*temp-);
Xor(ans,B);
}
}
for(int i=;i<q;i++){
scanf("%d",&temp);
ans.show(temp);
puts("");
}
}
int main() {
scanf("%d",&T);
while(T--) solve();
return ;
}

还有升级版本, 太强了.

#include <bits/stdc++.h>
using namespace std;
struct bits {
unsigned n[];
void set(unsigned x) {n[x >> ] |= ( << (x & ));}
void flip(int x) {n[x >> ] ^= ( << (x & ));}
bool get(int x) {return n[x >> ] & ( << (x & ));}
void clear() {memset(n, 0x00, sizeof n);}
} ans, a[];
int temp, maxa = , T, n, m, q;
void getans(int l, int r) {
while ((r - l) & ) {
r--;
if (a[].get(r))
ans.flip(r - l);
}
int pos = ;
while (l & ) {
l++; r++;
pos++;
}
l >>= , r >>= ;
for (int i = l; i < r; i++) {
ans.n[i - l] ^= a[pos].n[i];
}
}
void init() {
for (int i = ; i < ; i++)
a[i].clear();
ans.clear();
maxa = ;
}
int main() {
//freopen("1001.in","r",stdin);
//freopen("out.txt","w",stdout);
scanf("%d", &T);
while (T--) {
init();
scanf("%d%d%d", &n, &m, &q);
for (int i = ; i < n; i++) {
scanf("%d", &temp);
for (int j = ; j < ; j++) {
a[j].set(temp + j);
}
maxa = max(maxa, temp);
}
for (int i = ; i < m; i++) {
scanf("%d", &temp);
for (int j = ; j <= maxa; j += temp) {
getans(j, min(maxa + , j + temp));
}
}
for (int i = ; i < q; i++) {
scanf("%d", &temp);
printf("%d\n", (int)ans.get(temp));
}
}
return ;
}

hdu6085[压位+暴力] 2017多校5的更多相关文章

  1. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))

    5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 107  Solved: 57[Sub ...

  2. 【NOI】2017 整数(BZOJ 4942,LOJ2302) 压位+线段树

    [题目]#2302. 「NOI2017」整数 [题意]有一个整数x,一开始为0.n次操作,加上a*2^b,或询问2^k位是0或1.\(n \leq 10^6,|a| \leq 10^9,0 \leq ...

  3. 2017多校Round5(hdu6085~hdu6095)

    补题进度:7/11 1001(模意义下的卷积) 题意: 给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同 有5000 ...

  4. UOJ #314. 【NOI2017】整数 | 线段树 压位

    题目链接 UOJ 134 题解 可爱的电音之王松松松出的题--好妙啊. 首先想一个朴素的做法! 把当前的整数的二进制当作01序列用线段树维护一下(序列的第i位就是整数中位权为\(2^k\)的那一位). ...

  5. 2017 多校5 hdu 6093 Rikka with Number

    2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...

  6. 2017 多校4 Wavel Sequence

    2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...

  7. 2017 多校4 Security Check

    2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...

  8. 2017 多校3 hdu 6061 RXD and functions

    2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...

  9. 2017 多校2 hdu 6053 TrickGCD

    2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...

随机推荐

  1. HDU 2147 kiki's game kiki的游戏(博弈,找规律)

    题意: 给一个有n*m 个格子的棋盘,将一个硬币放在右上角一格,每次可以往左/下/左下移动一格,碰到不能移动的局面者输. 思路: 找P/N状态.先将(n,1)归为P状态,那么能一步到达此位置的有3个位 ...

  2. iphone开发思维导图

  3. UVALive 5031 Graph and Queries (Treap)

    删除边的操作不容易实现,那么就先离线然后逆序来做. 逆序就变成了合并,用并存集判断连通,用Treap树来维护一个连通分量里的名次. Treap = Tree + Heap.用一个随机的优先级来平衡搜索 ...

  4. Python-OpenCV中的cv2.inpaint()函数

    概念 修复是图像插值.数字修复算法在图像插值,照片恢复,缩放和超分辨率等方面具有广泛的应用. 大多数人会在家里放一些旧的退化照片,上面有一些黑点,一些笔画等.你有没有想过恢复它?我们不能简单地在绘画工 ...

  5. mysq--索引模块

    问题:为什么要 使用索引? --->快速查询数据,但是仅仅这么回答,就是不专业的!!! 应该要分为数据量少的时候,不适用索引,走全表扫描的话,查询速率也是很快的 数据量大的话,使用索引,查询速率 ...

  6. matplotlib subplot 子图

    总括 MATLAB和pyplot有当前的图形(figure)和当前的轴(axes)的概念,所有的作图命令都是对当前的对象作用.可以通过gca()获得当前的axes(轴),通过gcf()获得当前的图形( ...

  7. $GLOBALS['HTTP_RAW_POST_DATA']与$_POST的区别

    $HTTP_RAW_POST_DATA   The RAW / uninterpreted HTTP POst information can be accessed with:   $GLOBALS ...

  8. 使用powershell批量更新git仓库

    Get-ChildItem D:\GitHub\NetCore | ForEach-Object -Process{ cd $_.name; git pull; cd ../ }

  9. python入门:UTF-8转换成GBK编码

    #!/usr/bin/env python # -*- coding:utf-8 -*- #UTF-8转换成GBK编码 #temp(临时雇员,译音:泰坡) #decode(编码,译音:迪口德) #en ...

  10. CentOS 系统下Gitlab搭建与基本配置 以及代码备份迁移过程

    GitLab 是一个开源的版本管理系统,提供了类似于 GitHub 的源代码浏览,管理缺陷和注释等功能,你可以将代码免费托管到 GitLab.com,而且不限项目数量和成员数.最吸引人的一点是,可以在 ...