hdu 5637 BestCoder Round #74 (div.2)
Transform
- 给出nn个整数, 对于一个整数xx, 你可以做如下的操作若干次:
- + 令xx的二进制表示为\overline{b_{31}b_{30}...b_0}b31b30...b0, 你可以翻转其中一个位.
- + 令yy是给出的其中一个整数, 你可以把xx变为x \oplus yx⊕y, 其中\oplus⊕表示位运算里面的异或操作.
- 现在有若干整数对(S, T)(S,T), 对于每对整数你需要找出从SS变成TT的最小操作次数.
- 输入包含多组数据. 第一行有一个整数TT (T \le 20)(T≤20), 表示测试数据组数. 对于每组数据:
- 第一行包含两个整数nn和mm (1 \le n \le 15, 1 \le m \le 10^5)(1≤n≤15,1≤m≤105), 表示给出整数的数目和询问的数目. 接下来一行包含nn个用空格分隔的整数a_1, a_2, ..., a_na1,a2,...,an (1 \le a_i \le 10^5)(1≤ai≤105).
- 接下来mm行, 每行包含两个整数s_isi和t_iti (1 \le s_i, t_i \le 10^5)(1≤si,ti≤105), 代表一组询问.
- 对于每组数据, 输出一个整数S=(\displaystyle\sum_{i=1}^{m} i \cdot z_i) \text{ mod } (10^9 + 7)S=(i=1∑mi⋅zi) mod (109+7), 其中z_izi是第ii次询问的答案.
- 1
- 3 3
- 1 2 3
- 3 4
- 1 2
- 3 9
- 10
- 3 \to 43→4 (2次操作): 3 \to 7 \to 43→7→4
- 1 \to 21→2 (1次操作): 1 \oplus 3 = 21⊕3=2
- 3 \to 93→9 (2次操作): 3 \to 1 \to 93→1→9
- /*
- hdu 5637
- 给你n个数,然后对于x有两种操作:
- 1.改变x二进制中的一位,即1->0 or 0->1
- 2.将x与n个数中的t异或得到 x^t
- 求最后得到y的最小操作数
- 最开始想到求出x^y,但是不知道怎么处理。如果每个询问都进行一次搜索的话感觉
- 会TLE,为什么就没想到预处理出来- -!
- 正解:
- 先把上面两种操作得到所有情况求出来,然后从x->y也就是异或上(x^y),而这个值
- 的最小步数已经处理出来,直接进行O(1)的查询即可
- hhh-2016-03-06 12:12:08
- */
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <vector>
- #include <map>
- #include <queue>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- #define LL(x) (x<<1)
- #define RR(x) (x<<1|1)
- #define MID(a,b) (a+((b-a)>>1))
- const int maxn=100500;
- const int MOD = 1e9+7;
- int a[maxn];
- int step[maxn<<2];
- int tp[maxn<<2];
- int y,n;
- int ans ;
- void bfs()
- {
- memset(step,-1,sizeof(step));
- int star = 0,tail = 0;
- tp[0] = 0,step[0] = 0;
- while(star <= tail)
- {
- int cur = tp[star];
- for(int i =1; i <= n;i++)
- {
- int t = cur^a[i];
- if(step[t] != -1)
- continue;
- tp[++tail] = t;
- step[t] = step[cur]+1;
- }
- for(int i =0;i <= 17;i++)
- {
- int t = cur^(1<<i);
- if(step[t] != -1)
- continue;
- tp[++tail] = t;
- step[t] = step[cur]+1;
- }
- star++;
- }
- return ;
- }
- int main()
- {
- int t,q;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&n,&q);
- for(int i =1; i <= n; i++)
- {
- scanf("%d",&a[i]);
- }
- bfs();
- int x,y;
- ll sum = 0;
- for(int i = 1;i <= q;i++)
- {
- scanf("%d%d",&x,&y);
- int ans = step[x^y];
- sum = (sum+(ll)(i*ans)%MOD)%MOD;
- }
- printf("%I64d\n",sum%MOD);
- }
- return 0;
- }
hdu 5637 BestCoder Round #74 (div.2)的更多相关文章
- hdu 5636 搜索 BestCoder Round #74 (div.2)
Shortest Path Accepts: 40 Submissions: 610 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: ...
- hdu5635 BestCoder Round #74 (div.2)
LCP Array Accepts: 131 Submissions: 1352 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
- BestCoder Round #74 (div.2)
组合 1001 LCP Array 第一题就小难,出题的好像是浙大的大牛? 找到一个规律:a[i] = x, s[i..i+x]都想同.a[i] = a[i+1] + 1 (a[i] > 0), ...
- HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到
GTW likes math Memory Limit: 131072/131072 K (Java/Others) 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主 ...
- hdu 5600 BestCoder Round #67 (div.2)
N bulbs Accepts: 275 Submissions: 1237 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 655 ...
- BestCoder Round #74 (div.1) 1002Shortest Path(hdoj5636)
哈哈哈哈,我就知道这道题目再扔给我,我还是不会,就是这么菜,哈哈哈 一开始官方题解就没搞懂-然后就看了一下别人的代码,水水过就算了.今天拿到-GG: 题意: 一开始,有一张原图,有一条长度为n的链. ...
- HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序
Toposort 问题描述 给出nn个点mm条边的有向无环图. 要求删掉恰好kk条边使得字典序最小的拓扑序列尽可能小. 输入描述 输入包含多组数据. 第一行有一个整数TT, 表示测试数据组数. 对 ...
- 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 ( ...
- 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 ...
随机推荐
- DBA 小记 — 分库分表、主从、读写分离
前言 我在上篇博客 "Spring Boot 的实践与思考" 中比对不同规范的 ORM 框架应用场景的时候提到过主从与读写分离,本篇随笔将针对此和分库分表进行更深入地探讨. 1. ...
- HDFS的7个设计特点
1.Block的放置:默认不配置.一个Block会有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode,最后一份放在与指定Da ...
- Python内置函数(57)——print
英文文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text str ...
- eclipse怎么停止building workspace
Eclipse 一直不停 building workspace完美解决总结 一.产生这个问题的原因多种 1.自动升级 2.未正确关闭 3.maven下载lib挂起 等.. 二.解决总结 (1).解决方 ...
- emqtt 试用(三)mqtt 知识
一.概念 MQTT 协议客户端库: https://github.com/mqtt/mqtt.github.io/wiki/libraries 例如,mosquitto_sub/pub 命令行发布订阅 ...
- mqtt paho ssl java端代码
参考链接:http://blog.csdn.net/lingshi210/article/details/52439050 mqtt 的ssl配置可以参阅 http://houjixin.blog.1 ...
- SpringCloud的应用发布(四)vmvare+linux,网关代理
一.配置方式 1.代理同一个Eureka中注册的服务 2.代理url 二.访问方式:get - list 1.直接访问应用 2.代理访问应用
- Spark入门(1-5)Spark统一了TableView和GraphView
下面我们看一下图计算的简单示例: 从图我们可以看出, 拿到Wikipedia的文档后,我们可以: 1.Wikipedia的文档 -- > table视图 -- >分析Hyperlinks超 ...
- c# 工具类(字符串和时间,文件)
using System; using System.IO; using System.Text.RegularExpressions; using System.Windows.Browser; n ...
- linux ubunt 安装软件的前期准备——更新源的更换
如果是高手,请翻到页面最下方,更换更新源的总结,直接操作即可 可能会优点啰嗦,但是认真看,一定能解决问题~~希望对大家有帮助~ 最近在熟悉linux环境,自己安装了一个ubuntu虚拟机. 很多朋友问 ...