Description

21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野。 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能。 因此生物进化与基因的变异息息相关,考察基因变异的途径对研究生物学有着 至关重要的作用。现在,让我们来看这样一个模型:
1、所有的基因都可以看作一个整数或该整数对应的二进制码;
2、在 1 单位时间内,基因 x 可能会在其某一个二进制位上发生反转;
3、在 1 单位时间内,基因 x 可能会遭到可感染基因库内任一基因 y 的影响 而突变为 x XOR y。
现在给出可感染基因库,Q 组询问,每组给出初始基因与终止基因,请你 分别计算出每种变异最少要花费多少个单位时间。
 

Input

第 1 行两个整数 N, Q; 第 2 行 N 个用空格隔开的整数分别表示可感染基因库内的基因; 接下来 Q 行每行两个整数 S、T,分别表示初始基因与终止基因。

Output

输出 Q 行,依次表示每组初始基因到终止基因间最少所花时间。

Sample Input

3 3
1 2 3
3 4
1 2
3 9

Sample Output

2
1
2

Data Constraint

对于 20%的数据,N = 0;
对于额外 40%的数据,1 ≤ Q ≤ 100,所有基因表示为不超过 10^4 的非负整 数;
对于 100%的数据,0 ≤ N ≤ 20,1 ≤ Q ≤ 10^5,所有基因表示为不超过 10^6 的 非负整数。 


其实所有的操作都可以看成一个数亦或另一个数(显然)。

那么 :  st ^ x1 ^ x2 ^ ... ^ xk = ed ,

两边同时异或$\large st$得到

x1 ^ x2 ^ ... ^ xk = ed ^ st。

所以我们只需要求出0变成st^ed的步数就行了。

考虑到n很小,1e6也最多是$\large 2^{20}$。

所以直接bfs一遍就可以每次$\large O(1)$求出答案。


#include <iostream>
#include <cstdio>
#include <queue>
#include <ctime>
using namespace std;
#define reg register
inline int read() {int res = 0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48), ch=getchar();return res;
}int n, Q;
int a[25];
int dis[10000005];
bool vis[10000005];int main()
{
//    double ST = clock();n = read(), Q = read();for (reg int i = 1 ; i <= n ; i ++) a[i] = read();queue <int> q;q.push(0);vis[0] = 1;while(!q.empty()){int x = q.front();q.pop();for (reg int i = 1 ; i <= n ; i ++){int t = x ^ a[i];if (t > 3000000) continue;if (vis[t]) continue;vis[t] = 1;dis[t] = dis[x] + 1;q.push(t);}for (reg int i = 1 ; i <= 25 ; i ++){int t = x;int mark = (1 << i - 1);t ^= mark;if (t > 3000000) continue;if (vis[t]) continue;vis[t] = 1;dis[t] = dis[x] + 1;q.push(t);}}while(Q--) {int st = read(), ed = read();printf("%d\n", dis[st ^ ed]);}
//    double ED = clock();
//    printf("%.0lfms\n", ED - ST);return 0;
}

转载于:https://www.cnblogs.com/BriMon/p/9578553.html

[JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异相关推荐

  1. JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  2. JZOJ 100046. 【NOIP2017提高A组模拟7.14】收集卡片

    Description Star 计划订购一本将要发行的周刊杂志,但他可不是为了读书,而是-- 集卡. 已知杂志将要发行 N 周(也就是 N 期),每期都会附赠一张卡片.Star 通 过种种途径,了解 ...

  3. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  4. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  5. JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题

    Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...

  6. JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度

    Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 Sample Output Sa ...

  7. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情

    Description Input 输入文件第一行包含一个正整数 k.之后是 k 组测试用例. 每组测试用例的第一行为一个整数 n.接下来 n 行,每行 n 个以空格隔开的数,用来 描述棋盘的初始状态 ...

  8. JZOJ 100026. 【NOIP2017提高A组模拟7.7】图

    Description 有一个n个点n条边的有向图,每条边为< i,f(i),w(i)>,意思是i指向f(i)的边权为w(i)的边,现在小A想知道,对于每个点的si和mi. si:由i出发 ...

  9. 【NOIP2017提高A组模拟9.5】 NYG的背包

    题目描述 N Y G NYG NYG有一个神奇的背包,每放进去一个物品,背包的体积就会变大. 也就是说,每放进一个物品,背包会被占用一定的体积,但是紧接着背包的总体积又会增大一定的值(注意是在放入物品 ...

  10. JZOJ_100029. 【NOIP2017提高A组模拟7.8】陪审团 (Standard IO)

    Description 陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺. 小 W 提出了一个甲乙双方 ...

最新文章

  1. 2022-2028年中国FNG硅胶行业市场研究及前瞻分析报告
  2. Laravel和Thinkphp有什么区别,哪个框架好用
  3. 技术分析:搞懂链路追踪
  4. oracle的pdb,oracle pdb基本管理
  5. iio Engine logoHTML5 应用框架 iio Engine
  6. 算法-连续项的最大和问题(最大子数组问题)三种不同解法
  7. kmp算法 php,漫画KMP算法-程序员小灰
  8. 转:55个javascript处理网页技巧
  9. mac下通过brew安装的Nginx在哪
  10. kubernetes的常用命令
  11. 用Redis实现Session功能
  12. 解决Eclipse中文乱码的问题
  13. 怎么将多个Excel工作簿合并成一个新的工作簿
  14. Cytoscape.js 学习
  15. P2141_珠心算测验
  16. 燃烧远征怀旧服务器人数小程序,《魔兽世界怀旧服》燃烧的远征制作人访谈 详细讲解新版本...
  17. flea-jersey使用之文件上传接入
  18. [转载]GIS派系大解密(转)_拔剑-浆糊的传说_新浪博客
  19. Nokia计划在2009年推出多款OLED屏幕手机
  20. bluetoothd源码剖析(一)启动流程

热门文章

  1. python爬虫知识点总结(三)urllib库详解
  2. [20180604]在内存修改数据(bbed).txt
  3. centos5.5+NAT+Squid透明代理总结
  4. Apache禁止指定的user_agent、指定目录被访问
  5. c++中两个头文件定义同名类的解决办法
  6. openindiana软件包维护
  7. JFinal自动扫描表绑定model(包含jar包扫描)
  8. redis快照关闭了导致不能持久化的问题
  9. CAS(Central Authentication Service)——windows上简单搭建及測试
  10. 【Python】闭包Closure