/*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. Core Data stack

    https://developer.apple.com/library/content/documentation/DataManagement/Devpedia-CoreData/coreDataS ...

  2. [C++讨论课] 课堂记录(一)

    今天第一次参加c++讨论课,记录下了各组同学的展示的问题或者解决方法,也有一些知识点上的内容,供以后复习参考. 1.常量指针和指针常量问题 常量指针:指向常量的指针,例如const int *p =  ...

  3. XPath语法规则及实例

    XPath语法规则及实例 XPath语法规则 一.XPath术语: 1.节点:在XPath中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点. XML文档是被作为节点树 ...

  4. Problem C: 查找最大元素

    Problem C: 查找最大元素 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 377[Submit][Status][Web ...

  5. spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明

    之前SSM项目一直报错,就是找不到错误  气啊 后来在网上找到了答案:燕来spring5之后就不再需要写版本号了

  6. java基础—注解annotation

    一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...

  7. Spring3中好用的工具类收集

    1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntP ...

  8. 2d游戏中求出一个向量的两个垂直向量

    function cc.exports.VerticalVector(vec)--求出两个垂直向量 local result = {} result[1] = cc.p(vec.y/vec.x,-1) ...

  9. sql where in字符串问题

    在pycharm中执行 select * from value in(1,2); 会提醒: No statement found under the caret. Execute all statem ...

  10. Title Case a Sentence-freecodecamp算法题目

    Title Case a Sentence(中单词首字母大写) 要求 确保字符串的每个单词首字母都大写,其余部分小写. 像'the'和'of'这样的连接符同理. 思路 将句子小写化后用.split(& ...