/*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. LeetCode Min Stack 最小值栈

    题意:实现栈的四个基本功能.要求:在get最小元素值时,复杂度O(1). 思路:链表直接实现.最快竟然还要61ms,醉了. class MinStack { public: MinStack(){ h ...

  2. jquery.restrictFieldLength.js

    1.参考资料 http://www.cnblogs.com/aarond/archive/2013/08/02/3234042.html 2.使用举例 //字符控制 $(function () { $ ...

  3. phar打包项目压力对比测试

    工具 http_load 测试url: http://api.test.chaoma.me/agent/ad/good_goods/query http://api.test.chaoma.me/ag ...

  4. Java变量、Java对象初始化顺序

    局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...

  5. 使用Selennium实现短信轰炸机

    前言 可以用来轰炸一下骗子,但最好不要乱用.本来初学Python,仅当学习. selenium和ChromeDriver的安装与配置 可参考这篇博客,这里不再赘述. 程序实现 短信轰炸机的原理是利用一 ...

  6. Spring学习笔记之Spring概述

    概述   Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...

  7. 功能强大的CURL

      linux下的curl,有着非同一般的魔力,有人称它为下载工具,我更倾向于叫它“文件传输工具”因为它好像无所不能.从常见的 FTP, HTTP, TELNET, 等协议,还支持代理服务器,cook ...

  8. Linux下如何通过命令检查网卡是否插上网线

    How To:Linux下如何通过命令检查网卡是否插上网线   主要工具为ethtool来检查,主要关注的字段为"Link detected",注意如下的输出,其中em4实际物理上 ...

  9. 数据预处理之数据规约(Data Reduction)

    数据归约策略 数据仓库中往往具有海量的数据,在其上进行数据分析与挖掘需要很长的时间 数据归约 用于从源数据中得到数据集的归约表示,它小的很多,但可以产生相同的(几乎相同的)效果 数据归约策略 维归约  ...

  10. Linux - mkdir -p a/b/c

    mkdir -p a/b/c -p  会循环创建