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 ...
随机推荐
- webview缓存及跳转时截取url地址、监听页面变化
缓存及一些设定 我在做一些项目时,h5做的项目手机浏览器能使用,但是在搬到webview时候不能用,这个时候通过查阅资料,原来是webview没有设定好,包括缓存.缓存大小及路径等等 mWebview ...
- 08-TypeScript中的类
类的概念通常是在后端开发中实现的思想,比如C#.C++或Java,传统的JavaScript开发通过使用原型模式来模拟类的功能.在TypeScript中,天生就是支持类 的,可以让前端的开发更加具有面 ...
- Python内置函数(23)——dict
英文文档: class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) Return a new di ...
- 新概念英语(1-111)The most expensive model
Lesson 111 The most expensive model 最昂贵的型号 Listen to the tape then answer this question. Can Mr. Fri ...
- Spring Security 入门(3-11)Spring Security 的登录密码验证过程 UsernamePasswordAuthenticationFilter
认证过程如下 一.先判断请求(请求必须是post请求)地址是否为配置的 login-processing-url 值(默认/j_spring_security_check),如果不是,则放行,进入下一 ...
- 开发技巧(3-1)Eclipse查找关键字
1.选择资源目录->选择search-file菜单 2.在弹出的对话框中, 输入要[搜索的字符串],选择[selected resources],点击[search]按钮 3.搜索结果
- Easyui Datagrid 修改显示行号列宽度
EasyUI中Datagrid的第一列显示行号,可是如果数据量大的的时候,显示行号的那一列数据会显示不完全的. 可以通过修改Datagrid的样式来解决这个问题,在样式中加入下面这个样式,就可以自己修 ...
- 阿里安全归零实验室招聘各路大牛!offer好说!
阿里安全归零实验室成立于2017年11月,致力于对黑灰产技术的研究.实验室的愿景是通过技术手段解决当前日益严重的网络违规和网络犯罪问题,为阿里新经济体保驾护航. 实验室与寄生在阿里生态经济体的黑灰产直 ...
- 浅谈移动端适配-rem
对于移动端开发来说,无可避免的就是直面各种设备不同分辨率和不同DPR(设备像素比)的问题,在此忽略其他兼容性问题的探讨. 一. 移动端开发有关于像素的概念: 1.设备像素(dp),也叫物理像素.指设备 ...
- 喜马拉雅音频下载工具 - xmlyfetcher
xmlyfetcher用于下载喜马拉雅歌曲资源,可以下载单个音频资源,也可以下载整个专辑. 项目地址:https://github.com/smallmuou/xmlyfetcher 安装 安装jsh ...