Transform

 Accepts: 7
 Submissions: 49
 Time Limit: 4000/2000 MS (Java/Others)
 Memory Limit: 131072/131072 K (Java/Others)
问题描述
  1. 给出nn个整数, 对于一个整数xx, 你可以做如下的操作若干次:
  2.  
  3. + xx的二进制表示为\overline{b_{31}b_{30}...b_0}​b31​​b30​​...b0​​​​​, 你可以翻转其中一个位.
  4. + yy是给出的其中一个整数, 你可以把xx变为x \oplus yxy, 其中\oplus⊕表示位运算里面的异或操作.
  5.  
  6. 现在有若干整数对(S, T)(S,T), 对于每对整数你需要找出从SS变成TT的最小操作次数.
输入描述
  1. 输入包含多组数据. 第一行有一个整数TT (T \le 20)(T20), 表示测试数据组数. 对于每组数据:
  2.  
  3. 第一行包含两个整数nnmm (1 \le n \le 15, 1 \le m \le 10^5)(1n15,1m105​​), 表示给出整数的数目和询问的数目. 接下来一行包含nn个用空格分隔的整数a_1, a_2, ..., a_na1​​,a2​​,...,an​​ (1 \le a_i \le 10^5)(1ai​​≤105​​).
  4.  
  5. 接下来mm行, 每行包含两个整数s_isi​​和t_iti​​ (1 \le s_i, t_i \le 10^5)(1si​​,ti​​≤105​​), 代表一组询问.
输出描述
  1. 对于每组数据, 输出一个整数S=(\displaystyle\sum_{i=1}^{m} i \cdot z_i) \text{ mod } (10^9 + 7)S=(​i=1​∑​m​​izi​​) mod (109​​+7), 其中z_izi​​是第ii次询问的答案.
输入样例
  1. 1
  2. 3 3
  3. 1 2 3
  4. 3 4
  5. 1 2
  6. 3 9
输出样例
  1. 10
Hint
  1. 3 \to 434 (2次操作): 3 \to 7 \to 4374
  2.  
  3. 1 \to 212 (1次操作): 1 \oplus 3 = 213=2
  4.  
  5. 3 \to 939 (2次操作): 3 \to 1 \to 9319
  1. /*
  2. hdu 5637
  3.  
  4. 给你n个数,然后对于x有两种操作:
  5. 1.改变x二进制中的一位,即1->0 or 0->1
  6. 2.将x与n个数中的t异或得到 x^t
  7. 求最后得到y的最小操作数
  8.  
  9. 最开始想到求出x^y,但是不知道怎么处理。如果每个询问都进行一次搜索的话感觉
  10. 会TLE,为什么就没想到预处理出来- -!
  11.  
  12. 正解:
  13. 先把上面两种操作得到所有情况求出来,然后从x->y也就是异或上(x^y),而这个值
  14. 的最小步数已经处理出来,直接进行O(1)的查询即可
  15.  
  16. hhh-2016-03-06 12:12:08
  17. */
  18. #include <iostream>
  19. #include <cstdio>
  20. #include <cstring>
  21. #include <vector>
  22. #include <map>
  23. #include <queue>
  24. #include <algorithm>
  25. using namespace std;
  26. typedef long long ll;
  27. #define LL(x) (x<<1)
  28. #define RR(x) (x<<1|1)
  29. #define MID(a,b) (a+((b-a)>>1))
  30. const int maxn=100500;
  31. const int MOD = 1e9+7;
  32.  
  33. int a[maxn];
  34. int step[maxn<<2];
  35. int tp[maxn<<2];
  36. int y,n;
  37. int ans ;
  38.  
  39. void bfs()
  40. {
  41. memset(step,-1,sizeof(step));
  42. int star = 0,tail = 0;
  43. tp[0] = 0,step[0] = 0;
  44. while(star <= tail)
  45. {
  46. int cur = tp[star];
  47. for(int i =1; i <= n;i++)
  48. {
  49. int t = cur^a[i];
  50. if(step[t] != -1)
  51. continue;
  52. tp[++tail] = t;
  53. step[t] = step[cur]+1;
  54. }
  55. for(int i =0;i <= 17;i++)
  56. {
  57. int t = cur^(1<<i);
  58. if(step[t] != -1)
  59. continue;
  60. tp[++tail] = t;
  61. step[t] = step[cur]+1;
  62. }
  63. star++;
  64. }
  65. return ;
  66. }
  67.  
  68. int main()
  69. {
  70. int t,q;
  71. scanf("%d",&t);
  72. while(t--)
  73. {
  74. scanf("%d%d",&n,&q);
  75. for(int i =1; i <= n; i++)
  76. {
  77. scanf("%d",&a[i]);
  78. }
  79. bfs();
  80. int x,y;
  81. ll sum = 0;
  82. for(int i = 1;i <= q;i++)
  83. {
  84. scanf("%d%d",&x,&y);
  85. int ans = step[x^y];
  86. sum = (sum+(ll)(i*ans)%MOD)%MOD;
  87. }
  88. printf("%I64d\n",sum%MOD);
  89.  
  90. }
  91. return 0;
  92. }

  

hdu 5637 BestCoder Round #74 (div.2)的更多相关文章

  1. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  2. hdu5635 BestCoder Round #74 (div.2)

    LCP Array  Accepts: 131  Submissions: 1352  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 13 ...

  3. BestCoder Round #74 (div.2)

    组合 1001 LCP Array 第一题就小难,出题的好像是浙大的大牛? 找到一个规律:a[i] = x, s[i..i+x]都想同.a[i] = a[i+1] + 1 (a[i] > 0), ...

  4. HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到

    GTW likes math  Memory Limit: 131072/131072 K (Java/Others) 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主 ...

  5. hdu 5600 BestCoder Round #67 (div.2)

    N bulbs  Accepts: 275  Submissions: 1237  Time Limit: 10000/5000 MS (Java/Others)  Memory Limit: 655 ...

  6. BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)

    哈哈哈哈,我就知道这道题目再扔给我,我还是不会,就是这么菜,哈哈哈 一开始官方题解就没搞懂-然后就看了一下别人的代码,水水过就算了.今天拿到-GG: 题意: 一开始,有一张原图,有一条长度为n的链. ...

  7. HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序

    Toposort   问题描述 给出nn个点mm条边的有向无环图. 要求删掉恰好kk条边使得字典序最小的拓扑序列尽可能小. 输入描述 输入包含多组数据. 第一行有一个整数TT, 表示测试数据组数. 对 ...

  8. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  9. BestCoder Round #68 (div.2) tree(hdu 5606)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

随机推荐

  1. DBA 小记 — 分库分表、主从、读写分离

    前言 我在上篇博客 "Spring Boot 的实践与思考" 中比对不同规范的 ORM 框架应用场景的时候提到过主从与读写分离,本篇随笔将针对此和分库分表进行更深入地探讨. 1. ...

  2. HDFS的7个设计特点

    1.Block的放置:默认不配置.一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定Da ...

  3. Python内置函数(57)——print

    英文文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text str ...

  4. eclipse怎么停止building workspace

    Eclipse 一直不停 building workspace完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭 3.maven下载lib挂起 等.. 二.解决总结 (1).解决方 ...

  5. emqtt 试用(三)mqtt 知识

    一.概念 MQTT 协议客户端库: https://github.com/mqtt/mqtt.github.io/wiki/libraries 例如,mosquitto_sub/pub 命令行发布订阅 ...

  6. mqtt paho ssl java端代码

    参考链接:http://blog.csdn.net/lingshi210/article/details/52439050 mqtt 的ssl配置可以参阅 http://houjixin.blog.1 ...

  7. SpringCloud的应用发布(四)vmvare+linux,网关代理

    一.配置方式 1.代理同一个Eureka中注册的服务 2.代理url 二.访问方式:get - list 1.直接访问应用 2.代理访问应用

  8. Spark入门(1-5)Spark统一了TableView和GraphView

    下面我们看一下图计算的简单示例: 从图我们可以看出, 拿到Wikipedia的文档后,我们可以: 1.Wikipedia的文档 -- > table视图 -- >分析Hyperlinks超 ...

  9. c# 工具类(字符串和时间,文件)

    using System; using System.IO; using System.Text.RegularExpressions; using System.Windows.Browser; n ...

  10. linux ubunt 安装软件的前期准备——更新源的更换

    如果是高手,请翻到页面最下方,更换更新源的总结,直接操作即可 可能会优点啰嗦,但是认真看,一定能解决问题~~希望对大家有帮助~ 最近在熟悉linux环境,自己安装了一个ubuntu虚拟机. 很多朋友问 ...