hdu6085[压位+暴力] 2017多校5
/*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的更多相关文章
- [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 ...
- 【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 ...
- 2017多校Round5(hdu6085~hdu6095)
补题进度:7/11 1001(模意义下的卷积) 题意: 给出长度<=50000的两个数组A[] B[],保证数组中的值<=50000且A[]中数字两两不同,B[]中数字两两不同 有5000 ...
- UOJ #314. 【NOI2017】整数 | 线段树 压位
题目链接 UOJ 134 题解 可爱的电音之王松松松出的题--好妙啊. 首先想一个朴素的做法! 把当前的整数的二进制当作01序列用线段树维护一下(序列的第i位就是整数中位权为\(2^k\)的那一位). ...
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 2017 多校4 Wavel Sequence
2017 多校4 Wavel Sequence 题意: Formally, he defines a sequence \(a_1,a_2,...,a_n\) as ''wavel'' if and ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- 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 ...
- 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 ...
随机推荐
- hdu 2126 Buy the souvenirs 买纪念品(01背包,略变形)
题意: 给出一些纪念品的价格,先算出手上的钱最多能买多少种东西k,然后求手上的钱能买k种东西的方案数.也就是你想要买最多种东西,而最多种又有多少种组合可选择. 思路: 01背包.显然要先算出手上的钱m ...
- 【转载】Python实现图书馆预约功能
注释: 1,原博主是:http://blog.csdn.net/cq361106306/article/details/42644001# 2,学校是我现在的学校,我最近也在研究这个,所以转了. 3, ...
- Linq语法学习_增删篇。
关键词: select from where in into join on equals orderby descending thenby Table<TEntity> Default ...
- poj 3159 Candies (差分约束)
一个叫差分约束系统的东西.如果每个点定义一个顶标x(v),x(t)-x(s)将对应着s-t的最短路径. 比如说w+a≤b,那么可以画一条a到b的有向边,权值为w,同样地给出b+w2≤c,a+w3≤c. ...
- 在CNN中使用Tensorflow进行数据增强
开始之前,需要思考一些基本问题 1.为什么需要大量数据 当您训练机器学习模型时,您真正在做的是调整其参数,以便它可以将特定输入(例如,图像)映射到某个输出(标签).我们的优化目标是追逐我们模型损失较低 ...
- TDB文件介绍
samba在运行时,Samba 存储许多信息,从本地密码到希望从中收到信息的一系列客户端.这类数据其中一些是暂时的,在 Samba 重启时可能会被丢弃,但是另一些却是永久的,不会被丢弃.这类数据可能是 ...
- python之生成器的初识
1. 生成器的定义 生成器的本质就是迭代器.python社区生成器和迭代器是一种 2. 生成器和迭代器区别 迭代器: 都是Python给你提供的已经写好的工具或者通过数据转化得来的 生成器: ...
- sencha touch 入门学习资料大全
现在sencha touch已经更新到2.3.1版本了 重新整理一下资料 官方网站:http://www.sencha.com/products/touch/ 在线文档:http://docs.sen ...
- Python——函数基础
函数是什么 它相当于一个独立的代码块,可以被重复使用,如果需要增加一个功能或者修改一个功能,只需要,增加或者修改函数即可. 函数分类 内置函数 python解释器已经为我们定义好的参数,比如:len( ...
- logging console not work
配置 log 信息传输到控制台 参考官网:https://docs.djangoproject.com/en/2.1/topics/logging/ By default, this config o ...