CodeForces - 862C Mahmoud and Ehab and the xor(构造)【异或】
<题目链接>
题目大意:
给出n、m,现在需要你输出任意n个不相同的数(n,m<1e5),使他们的异或结果为m,如果不存在n个不相同的数异或结果为m,则输出"NO",本题中所有数均需小于1e6。
解题分析:
因为本题是SPJ,且当n比较大的时候,需要输出很多数,所以我们试着去构造这n个数,力图找出一些规律。n<=2的时候很好直接进行特判即可。n>=3的时候,可以直接进行简单的构造,比如前面n-1项依次设为1,2,3,……(下面假设前面这些连续的项异或结果为res),最后一项为 cur = res^m (这是根据 0^x = x ,这个公式得到的,即前面的所有项都进行简单构造,然后最后一项让这n个数的异或结果为m)。这样看上去很完美,实际上存在一些漏洞。因为题目要求这n个数必须不相同,但是按照上面的构造方法,是可能让cur与前面n-1个数相同的,不相信的同学可以简单构造反例,所以,我们需要引进两个大的二进制数来避免这种情况,因为按照我们前面的够着方法,前n-1个数最大会小于n,而n<1e5,但是题目对我们构造的数的范围要求要小于1e6,所以我们可以添加两个大于1e5,小于1e6的数,同时,尽量让这两个数与之前构造的n-3个数之间相互异或的结果都不能为0 (至于为什么是要两个这样的数,可以自行举反例,主要的判断冲突依据就是这n个数必须互不相同)。所以最后的一个数cur = res^x1^x2^m。
#include <iostream>
using namespace std; int main(){
ios::sync_with_stdio(false);
int n,m;cin>>n>>m;
if(n==){
puts("YES");
cout<<m<<endl;
}else if(n==){
if(!m) {
puts("NO");
}else {
puts("YES");
cout<<"0 "<<m<<endl;
}
}else{
int x1=<<,x2=<<;
puts("YES");
int res=;
for(int i=;i<=n-;i++){
cout<<i<<" ";
res^=i;
}
cout<<x1<<" "<<x2<<" "<<(res^x1^x2^m) <<endl;
}
}
2019-02-01
CodeForces - 862C Mahmoud and Ehab and the xor(构造)【异或】的更多相关文章
- Codeforces 862C - Mahmoud and Ehab and the xor
862C - Mahmoud and Ehab and the xor 思路:找两对异或后等于(1<<17-1)的数(相当于加起来等于1<<17-1),两个再异或一下就变成0了 ...
- CodeForces - 862C Mahmoud and Ehab and the xor(构造)
题意:要求构造一个n个数的序列,要求n个数互不相同,且异或结果为x. 分析: 1.因为0 ^ 1 ^ 2 ^ 3 ^ ... ^ (n - 3) ^ (n - 2) ^ (0 ^ 1 ^ 2 ^ 3 ...
- 862C - Mahmoud and Ehab and the xor(构造)
原题链接:http://codeforces.com/contest/862/problem/C 题意:给出n,x,求n个不同的数,使这些数的异或和为x 思路:(官方题解)只有n==2&&am ...
- Coderfroces 862 C. Mahmoud and Ehab and the xor
C. Mahmoud and Ehab and the xor Mahmoud and Ehab are on the third stage of their adventures now. As ...
- Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)
Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...
- Codeforces 959F Mahmoud and Ehab and yet another xor task 线性基 (看题解)
Mahmoud and Ehab and yet another xor task 存在的元素的方案数都是一样的, 啊, 我好菜啊. 离线之后用线性基取check存不存在,然后计算答案. #inclu ...
- Codeforces 862A Mahmoud and Ehab and the MEX
传送门:CF-862A A. Mahmoud and Ehab and the MEX time limit per test 2 seconds memory limit per test 256 ...
- Codeforces 862B - Mahmoud and Ehab and the bipartiteness
862B - Mahmoud and Ehab and the bipartiteness 思路:先染色,然后找一种颜色dfs遍历每一个点求答案. 代码: #include<bits/stdc+ ...
- Codeforces 862D. Mahmoud and Ehab and the binary string (二分)
题目链接:Mahmoud and Ehab and the binary string 题意: 一道交互题,首先给出一个字符串的长度l.现在让你进行提问(最多15次),每次提问提出一个字符串,会返回这 ...
随机推荐
- Modbus库开发笔记:Modbus ASCII Master开发
这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCI ...
- python 知识梳理
1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...
- 在java中,OOA是什么?OOD是什么?OOP是什么?
注:本文来源于< 在java中,OOA是什么?OOD是什么?OOP是什么?> 在java中,OOA是什么?OOD是什么?OOP是什么? OOA Object-Oriented Anal ...
- Confluence 6 管理协同编辑
协同编辑能够让项目小组中的协同合作达到下一个高度.这个页面对相关协同编辑中的问题进行了讨论,能够提供给你所有希望了解的内容. 进入 Collaborative editing 页面来获得项目小组是如何 ...
- 1709: Fire or Retreat(zzuli)
水题,哎,可是第一次是因为编译错了,vs不知咋了,无奈: 后面几次又因为类型用了int错了,痛苦: 题目描述 在与科技水平远胜于我们的外星人的战斗最后,我们能够用来对外星装甲造成伤害的武器只剩下了…… ...
- light1370 欧拉函数打表
/* 给定n个数ai,要求欧拉函数值大于ai的最小的数bi 求sum{bi} */ #include<bits/stdc++.h> using namespace std; #define ...
- java使用POI解析2007以上的Excel表格
来自http://hao0610.iteye.com/blog/1160678 使用poi来解析Excel的xls和xlsx. 解析xls: package xls; import java.io.F ...
- python 作用域
什么是命名空间 == 对一个名字起作用的范围 # def test():# print("----test----") # import test# test.test() # f ...
- 使用python调用email模块发送邮件附件
使用python调用email模块实现附件发送 需要模块: import datetime import time import sys import mimetypes import smtplib ...
- logstash配置白名单决定去哪个index
input { kafka { bootstrap_servers => "127.0.0.1:9092" client_id => "log" a ...