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 ...
随机推荐
- lca(最近公共祖先(离线))
转自大佬博客 : https://www.cnblogs.com/JVxie/p/4854719.html LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 首先是最近公共祖先 ...
- Redis的安装以及spring整合Redis时出现Could not get a resource from the pool
Redis的下载与安装 在Linux上使用wget http://download.redis.io/releases/redis-5.0.0.tar.gz下载源码到指定位置 解压:tar -xvf ...
- 动态代理--Cglib
JDK 的Proxy 实现,需要代理对象实现接口: package com.utils; import java.lang.reflect.InvocationHandler; import java ...
- 记录一次mysql中自定义获取UUID的函数
循环方式一: DELIMITER :; drop function if exists test.fn_test:; create function test.fn_test() ) begin ) ...
- Python中文编码问题(字符串前面加'u')
中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢? 我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各 ...
- java基础—面向对象2
一.JAVA类的定义
- Bootstrap 提示工具(Tooltip)插件
当您想要描述一个链接的时候,使用提示工具插件是一个不错的选择.Bootstrap提示工具插件做了很多的改进,例如不需要依赖图像,而是改变Css动画效果,用data属性来存储标题信息. 用法 提示工具( ...
- java实现验证码功能
java实现验证码功能 通过java代码实现验证码功能的一般思路: 一.通过java代码生成一张验证码的图片,将验证码的图片保存到项目中的指定文件中去,代码如下: package com.util; ...
- COMP9021——6.3
有关yield的用法简介以及图灵机 第一节课大体没有太大变化,前半节课为了给图灵机的讲解做铺垫引入了yield.数组.字符串和文件等都是一个可迭代的对象,但由于它们的所有数据都存储与内存中,对内存的消 ...
- 使用TensorFlow的卷积神经网络识别手写数字(2)-训练篇
import numpy as np import tensorflow as tf import matplotlib import matplotlib.pyplot as plt import ...