HDU - 5637


题目大意:

给出n个数的序列a,对于一个整数x,有两种操作:
1.改变x二进制中任一位
2.将x变为x^a[i]
m次查询,每次查询输入两个整数x和y,问x最少经过多少次操作可以变成y

求最少多少次操作可以值得x变成y实际上不就是一个“迷宫求最短路”嘛。
这里是状态转移到另一个状态的最短路,也就是直接bfs即可。易得最先转移到的就是最短路。

数据比较大m有1e5,每次输入数据再爆搜肯定要超时。
因为这里都只涉及到异或操作。

我们发现s^(t[1]^t[2]^...t[j])=t。因为A^B=C => A^C=B那么转化成(t[1]^t[2]^...t[j])=s^t,也就是说我们只需要找到如何使用最少的操作从0开始得到s^t即可。

这样我们就可以直接先预处理出整个数的最小距离,然后输入查询O(1)按照题目要求输出即可。

代码就是一个简单的bfs主要是思路,一般这类的经过最少操作次数构造或者使得一个数变成另一个数大体上都是这个思路。

一般看不出什么算法的题都可以用爆搜解决。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>using namespace std;
typedef long long ll;
const int N = 5000007, mod = 1e9+7;int n, m, t;
int a[N];
int dist[N];void bfs(){memset(dist, -1, sizeof dist);queue<int>q;dist[0] = 0;q.push(0);while(q.size()){int x = q.front();q.pop();for(int i = 1;i <= n ; ++ i)if(dist[x ^ a[i]] == -1){dist[x ^ a[i]] = dist[x] + 1;q.push(x ^ a[i]);}for(int i = 0;i <= 17 ; ++ i){if(dist[x ^ (1 << i)] == -1){dist[x ^ (1 << i)] = dist[x] + 1;q.push(x ^ (1 << i));}}}
}int main(){scanf("%d", &t);while(t -- ){scanf("%d%d", &n, &m);for(int i = 1;i <= n; ++ i)scanf("%d", &a[i]);bfs();ll ans = 0;for(int i = 1;i <= m ; ++ i){int a, b;scanf("%d%d", &a, &b);ans = (ans + (1ll * i * dist[a ^ b]) % mod) %mod;}printf("%lld\n", ans);}return 0;
}

HDU - 5637 Transform (思维、bfs预处理)相关推荐

  1. HDU 4856 Tunnels(BFS+状压DP)

    HDU 4856 Tunnels 题目链接 题意:给定一些管道.然后管道之间走是不用时间的,陆地上有障碍.陆地上走一步花费时间1,求遍历全部管道须要的最短时间.每一个管道仅仅能走一次 思路:先BFS预 ...

  2. HDU - 1495 非常可乐(BFS,数学)

    HDU - 1495 非常可乐(BFS,数学) 巨佬的数学解法 #include<iostream> using namespace std; int gcd(int a,int b) { ...

  3. HDU 1430 魔板(康托展开+BFS+预处理)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  4. Orac and Game of Life CodeForces - 1350E(思维+BFS)

    Please notice the unusual memory limit of this problem. Orac likes games. Recently he came up with t ...

  5. HDU 2653 (记忆化BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...

  6. HDU - 5875 Function [单调性剪枝+预处理]

    2016大连网络赛 H题 传送门:HDU - 5875 Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262 ...

  7. HDU 2102 题解(BFS 广度优先搜索 练习题)

    原题链接,但是HDU现在校外提交需要审核 欢迎来 SCPC OJ提交 知识点 : BFS(广搜/宽搜) 原题: 描述: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生 ...

  8. HDU 1104 Remainder (BFS)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1104 题意:给你一个n.m.k,有四种操作n+m,n-m,n*m,n%m,问你最少经过多少步,使得最后 ...

  9. hdu 5040 Instrusive【BFS+优先队列】

    2014北京网络赛09题,hdu 5040 这次网络赛真是惨,也怪做题策略没想好,当时切完签到题之类的水题之后,马上就去看06青蛙那题去了.结果被那只死青蛙给坑惨了T_T...搞了四小时没搞出来... ...

最新文章

  1. 2022-2028年中国电商物流行业投资分析及前景预测报告
  2. 2017SDN市场一片繁荣,全球企业纷纷“亮剑“
  3. 读写分离原来这么简单,一个小注解就够了
  4. asp.net的get和post请求
  5. Message LongText(消息的详细长文本)
  6. 编程命名中的7+1个提示
  7. Android开发编码规范pdf文件下载
  8. 你对程序员的误会有多深?
  9. ubuntu12.04samba服务器配置
  10. 从架构设计理念到集群部署,全面认识KubeEdge
  11. Composite模式
  12. 异步电机参数计算的公式法
  13. HR人事管理系统软件有哪些?如何选择HR人事管理软件?
  14. LDA NCA: 降维与度量学习
  15. 【ToyDB-Rust】超详细介绍
  16. Greasy Fork发布油猴脚本
  17. 阿里云使用笔记-第三篇-使用阿里云App连接实例
  18. 读书笔记《人人都是产品经理》
  19. 2016年Linux下五个最佳视频编辑软件
  20. OFO单车天价回购ofo.com,so域名后缀地位不保!

热门文章

  1. 5 种将死的编程语言!
  2. 视频程式化的基于帧差异的时间损失
  3. C# Aop简单扫盲及ORM实体类属性拦截示例
  4. 为开发可穿戴设备 索尼收购了以色列芯片制造商
  5. 《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.4节单位和度量
  6. AttributerError: HTTPServer instance has no attribute 'server_forever'
  7. 将SQL for xml path('')中转义的字符正常显示
  8. 在Mac上使用Nginx和FastCGI部署Flask应用
  9. 数据挖掘视频教程下载
  10. 远程usb端口映射_PLC远程控制