Transform

 Accepts: 7
 Submissions: 49
 Time Limit: 4000/2000 MS (Java/Others)
 Memory Limit: 131072/131072 K (Java/Others)
问题描述
给出nn个整数, 对于一个整数xx, 你可以做如下的操作若干次:

  + 令xx的二进制表示为\overline{b_{31}b_{30}...b_0}​b​31​​b​30​​...b​0​​​​​, 你可以翻转其中一个位.
+ 令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≤10​5​​), 表示给出整数的数目和询问的数目. 接下来一行包含nn个用空格分隔的整数a_1, a_2, ..., a_na​1​​,a​2​​,...,a​n​​ (1 \le a_i \le 10^5)(1≤a​i​​≤10​5​​).

接下来mm行, 每行包含两个整数s_is​i​​和t_it​i​​ (1 \le s_i, t_i \le 10^5)(1≤s​i​​,t​i​​≤10​5​​), 代表一组询问.
输出描述
对于每组数据, 输出一个整数S=(\displaystyle\sum_{i=1}^{m} i \cdot z_i) \text{ mod } (10^9 + 7)S=(​i=1​∑​m​​i⋅z​i​​) mod (10​9​​+7), 其中z_iz​i​​是第ii次询问的答案.
输入样例
1
3 3
1 2 3
3 4
1 2
3 9
输出样例
10
Hint
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)的更多相关文章

  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. centos 6.5安装并配置mysql

    折腾了半天终于把mysql安装并配置好了,以下是安装步骤和遇到问题的解决方式 1.查看机器上是否已经安装了mysql或其相关项 # yum list installed | grep mysql如果安 ...

  2. 常见web攻击总结

    搞Web开发离不开安全这个话题,确保网站或者网页应用的安全性,是每个开发人员都应该了解的事.本篇主要简单介绍在Web领域几种常见的攻击手段及Java Web中的预防方式. XSS SQL注入 DDOS ...

  3. Win7添加php环境变量.

    1) "我的电脑"右键"属性"->高级系统设置->环境变量->系统变量->Path->编辑 2) 将PHP的执行路径的目录&quo ...

  4. 第二章 初识JSP

    第二章   初识JSP 一.JSP简述 1.是JSP JSP是指在HTML中嵌入Java脚本语言.全称(Java Server Pages) 当用户通过浏览器访问Web应用时,使用JSP容器对请求的J ...

  5. Mysql数据库主从配置

    一.为什么要使用数据库主从架构 一个网站损耗资源最厉害的就是数据库,最易崩溃的也是数据库,而数据库崩溃带来的后果是非常严重的.数据库分为读和写操作,在实际的应用中,读操作的损耗远比写操作多太多,因此读 ...

  6. 说说Java代理模式

    代理实现可以分为静态代理和动态代理. 静态代理 静态代理模式其实很常见,比如买火车票这件小事:黄牛相当于是火车站的代理,我们可以通过黄牛买票,但只能去火车站进行改签和退票.在代码实现中相当于为一个委托 ...

  7. Linux知识积累(8)卸载安装jdk

    java -version yum remove java yum groupremove java java -version tar -zxvf jdk-8u60-linux-x64.tar.gz ...

  8. WebBench的安装与使用

    webbench最多可以模拟3万个并发连接去测试网站的负载能力. 一.编译安装 1.上传压缩包到虚机里,rz webbench-1.5.tar.gz 2.解压 tar zxvf webbench-1. ...

  9. 【已解决】React中配置Sass引入.scss文件无效

    React中配置Sass引入.scss文件无效 在react中使用sass时,引入.scss文件失效 尝试很多方法没法解决,最终找到解决方法,希望能帮助正在坑里挣扎的筒子~ 在node_modules ...

  10. *args和**kwargs

    #coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...