2017 Multi-University Training Contest - Team 5 1.Rikka with Candies(压位)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6085
题意:给定长度分别为n,m的数组A和B,给定q个询问,每次询问给出一个k,求满足Ai%Bj=k的数对(i,j)的个数,结果mod2。
题解:
分析:简单说就是枚举Bi的倍数,在对应区间内得到k的个数,加到答案上,复杂度是O(n^2)。由于答案只需要mod2,因此可以用压位来达到一个常数/32的优化,就可以过了。。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define Max(x,y) x>=y?x:y 5 using namespace std; 6 typedef unsigned long long ull; 7 const int maxn=5e4+5; 8 const ull r=(((ull)1<<6)-1); 9 int n,m,mx,a,t,q,k; 10 ull b[maxn/64+5],ans[maxn/64+5]; 11 ull B[maxn]; 12 void init(){ 13 memset(ans,0,sizeof(ans)); 14 memset(b,0,sizeof(b)); 15 mx=0; 16 } 17 void add(int s,int t,int mod){ 18 ull d1=64-(s&r),d2=s&r,q,p; 19 if(t>mx)t=mx; 20 int c=0; 21 while(s+64<=t){ 22 ans[c]^=b[s>>6]>>d2; 23 q=b[(s>>6)+1]<<d1; 24 if(d1==64)q=0; 25 ans[c]^=q; 26 c++; 27 s+=64; 28 } 29 if(s>>6!=t>>6){ 30 ans[c]^=b[s>>6]>>d2; 31 q=(((ull)1<<((t&r)+1))-1); 32 if((t&r)==63)q=~(ull)0; 33 q=(b[t>>6]&q)<<d1; 34 if(d1==64)q=0; 35 ans[c]^=q; 36 }else{ 37 q=(((ull)1<<((t&r)+1))-1); 38 if((t&r)==63)q=~(ull)0; 39 p=(b[s>>6]&q); 40 ans[c]^=(p>>d2); 41 } 42 } 43 int Check(int loca){ 44 return (ans[loca>>6]&((ull)1<<(loca&((1<<6)-1))))?1:0; 45 } 46 //int aa[maxn],kk[maxn]; 47 //int test(){ 48 // memset(kk,0,sizeof(kk)); 49 // for(int i=0;i<n;i++){ 50 // for(int j=0;j<m;j++){ 51 // kk[aa[i]%B[j]]++; 52 // cout<<aa[i]%B[j]<<' '; 53 // } 54 // cout<<endl; 55 // } 56 // for(int i=0;i<maxn;i++){ 57 // kk[i]%=2; 58 // } 59 //} 60 int main(){ 61 // freopen("e:\\out.txt","w",stdout); 62 // freopen("e:\\in.txt","r",stdin); 63 scanf("%d",&t); 64 while(t--){ 65 init(); 66 scanf("%d%d%d",&n,&m,&q); 67 for(int i=0;i<n;i++){ 68 scanf("%d",&a); 69 mx=Max(mx,a); 70 b[a>>6]^=(ull)1<<(a&((1<<6)-1)); 71 // aa[i]=a; 72 } 73 for(int i=0;i<m;i++) 74 scanf("%d",&B[i]); 75 for(int i=0;i<m;i++){ 76 for(int l=0;(ull)l*B[i]<=mx;l++){ 77 add(l*B[i],(l+1)*B[i]-1,B[i]); 78 } 79 } 80 // test(); 81 for(int i=0;i<q;i++){ 82 scanf("%d",&k); 83 // printf("%d %d ",i,kk[k]); 84 printf("%d\n",Check(k)); 85 } 86 } 87 return 0; 88 }
转载于:https://www.cnblogs.com/7391-KID/p/7352231.html
2017 Multi-University Training Contest - Team 5 1.Rikka with Candies(压位)相关推荐
- 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...
- 2017 Multi-University Training Contest - Team 1
2017 Multi-University Training Contest - Team 1 01 签到的 #include<bits/stdc++.h> using names ...
- 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard(...)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017 Multi-University Training Contest - Team 7:1002. Build a tree(递归)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017 Multi-University Training Contest - Team 7:1011. Kolakoski(模拟)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...
- 2017 Multi-University Training Contest - Team 7:1005. Euler theorem(答案是(n+3)/2)
其他题目题解: 2017 Multi-University Training Contest - Team 7:1003. Color the chessboard 2017 Multi-Univer ...
- 2017 Multi-University Training Contest - Team 2 Puzzle
题目大意: 给定n, m, p.然后按照一个规则往n*m的方格里填数,最后一个方格是空格,然后玩拼图游戏,问能否复原 规则是:把1~n*m-1的排列中的第1,p+1,2*p+1.....个数依次取出来 ...
最新文章
- linux xampp eclipse xdebug 无法进入断点
- linux编译安装git
- Java 设计模式之工厂模式(二)
- web服务器文件管理,web文件管理服务器
- ScaleForm十六戒言
- 信息学奥赛一本通C++语言——1117:整数去重
- 顶尖学府 加州伯克利大学开发高效机器人操纵框架
- java查询比对是否重复_java-对象的ArrayList,比较对象并查找重复项,...
- 聊一聊 http2.0
- python给excel排序_python初学—-实现excel里面读数据进行排序
- 【SSDP 协议介绍】
- 强大的Java辅助类工具箱Hutool
- cmd命令查看计算机信息,cmd命令查看局域网内计算机信息
- 显示器的bit是什么意思,8bit和10bit到底谁好
- 隔离通信-RS485(一)
- 怎么在火狐中调试html,如何利用火狐浏览器开发工具调试网页颜色搭配?
- vc使用默认的浏览器打开网页
- 蓝桥 算法训练 藏匿的刺客(C语言)
- 【C# 单因素方差分析(One Way ANOVA)】
- Python Pandas 读取 Excel 表格处理出席表
热门文章
- 安卓桌面整理app_升级到 iOS 13,你还会删除 APP 和整理桌面了吗?
- python教材答案字典与集合_Python——集合与字典练习
- mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
- python新手图解_Python完全新手教程
- char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char
- python元组_Python元组
- printf格式化字符串_Java printf()–将格式化的字符串打印到控制台
- scala if 语句缩写_Scala If-Else语句示例教程
- 一只特立直行的猪_修复特立尼达IE 11部分页面请求(PPR)问题/支持所有IE浏览器
- jenkins的邮件提醒