链接: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(压位)相关推荐

  1. 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 ...

  2. 2017 Multi-University Training Contest - Team 1

    2017 Multi-University Training Contest - Team 1 01     签到的 #include<bits/stdc++.h> using names ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  7. 2017 Multi-University Training Contest - Team 7:1011. Kolakoski(模拟)

    其他题目题解: 2017 Multi-University Training Contest - Team 7:1005. Euler theorem 2017 Multi-University Tr ...

  8. 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 ...

  9. 2017 Multi-University Training Contest - Team 2 Puzzle

    题目大意: 给定n, m, p.然后按照一个规则往n*m的方格里填数,最后一个方格是空格,然后玩拼图游戏,问能否复原 规则是:把1~n*m-1的排列中的第1,p+1,2*p+1.....个数依次取出来 ...

最新文章

  1. linux xampp eclipse xdebug 无法进入断点
  2. linux编译安装git
  3. Java 设计模式之工厂模式(二)
  4. web服务器文件管理,web文件管理服务器
  5. ScaleForm十六戒言
  6. 信息学奥赛一本通C++语言——1117:整数去重
  7. 顶尖学府 加州伯克利大学开发高效机器人操纵框架
  8. java查询比对是否重复_java-对象的ArrayList,比较对象并查找重复项,...
  9. 聊一聊 http2.0
  10. python给excel排序_python初学—-实现excel里面读数据进行排序
  11. 【SSDP 协议介绍】
  12. 强大的Java辅助类工具箱Hutool
  13. cmd命令查看计算机信息,cmd命令查看局域网内计算机信息
  14. 显示器的bit是什么意思,8bit和10bit到底谁好
  15. 隔离通信-RS485(一)
  16. 怎么在火狐中调试html,如何利用火狐浏览器开发工具调试网页颜色搭配?
  17. vc使用默认的浏览器打开网页
  18. 蓝桥 算法训练 藏匿的刺客(C语言)
  19. 【C# 单因素方差分析(One Way ANOVA)】
  20. Python Pandas 读取 Excel 表格处理出席表

热门文章

  1. 安卓桌面整理app_升级到 iOS 13,你还会删除 APP 和整理桌面了吗?
  2. python教材答案字典与集合_Python——集合与字典练习
  3. mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
  4. python新手图解_Python完全新手教程
  5. char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char
  6. python元组_Python元组
  7. printf格式化字符串_Java printf()–将格式化的字符串打印到控制台
  8. scala if 语句缩写_Scala If-Else语句示例教程
  9. 一只特立直行的猪_修复特立尼达IE 11部分页面请求(PPR)问题/支持所有IE浏览器
  10. jenkins的邮件提醒