Codeforces Round #435 (Div. 2) c+d
C:给n和k要求,找出n个不同的数,使得亦或起来等于k
可以先预处理从1到1e5,找亦或起来等于(11111111111111111)(二进制)的所有对数,然后四个一起亦或就是0了,再和k亦或
可以看出要分四种情况讨论,对于n%4=p的情况,应该找到p-1个不同的数亦或起来等于0,可以小范围的p-1重循环搜索,对于n%4==2&&x==0的情况要注意特判,可以用6重循环,每层不超过10
代码过于复杂了,应该可以简化一下
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; bool vis[N];
int main()
{
// cout<<(0^1^2^4^8^15)<<endl;
ios::sync_with_stdio(false);
cin.tie();
int n,x;
cin>>n>>x;
if(n==&&x==)
{
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl;
vector<int>v1,v2;
for(int i=;i<(<<);i++)
{
int s=;
for(int j=;j<;j++)
{
if(i&(<<j));
else s+=(<<j);
}
// cout<<i<<" "<<s<<endl;
if(!vis[i]&&!vis[s])
{
vis[s]=vis[i]=;
v1.pb(i);
v2.pb(s);
}
}
if(n%==&&x==)
{
set<int>ans;
int a,b,c,d,e,f;
for(int i=;i<;i++)
{
for(int j=i+;j<;j++)
{
for(int k=j+;k<;k++)
{
for(int ii=k+;ii<;ii++)
{
for(int jj=ii+;jj<;jj++)
{
if((i^j^k^ii^jj)!=i&&(i^j^k^ii^jj)!=j
&&(i^j^k^ii^jj)!=k&&(i^j^k^ii^jj)!=ii
&&(i^j^k^ii^jj)!=jj&&(i^j^k^ii^jj)==)
{
ans.insert(i);
ans.insert(j);
ans.insert(k);
ans.insert(ii);
ans.insert(jj);
ans.insert();
a=i,b=j,c=k,d=ii,e=jj,f=;
break;
}
}
if(ans.size()!=)break;
}
if(ans.size()!=)break;
}
if(ans.size()!=)break;
}
if(ans.size()!=)break;
}
int k=;
for(int i=;i<v1.size();i++)
{
if(k>=(n-)/)break;
if(v1[i]==a||v2[i]==a||v1[i]==b||v2[i]==b||
v1[i]==c||v2[i]==c||v1[i]==d||v2[i]==d||
v1[i]==e||v2[i]==e||v1[i]==f||v2[i]==f)continue;
k++;
ans.insert(v1[i]);
ans.insert(v2[i]);
}
for(auto x:ans)
cout<<x<<" ";
cout<<endl;
return ;
}
set<int>ans;
if(n%==)
{
ans.insert(x);
int k=;
for(int i=;i<v1.size();i++)
{
if(k>=(n-)/)break;
if(v1[i]==x||v2[i]==x)continue;
ans.insert(v1[i]);
ans.insert(v2[i]);
k++;
}
}
else if(n%==)
{
int a,b;
for(int i=;i<;i++)
{
// cout<<(x^i)<<" "<<i<<endl;
if((x^i)!=i)
{
// cout<<(x^i)<<" "<<i<<endl;
ans.insert(x^i);
ans.insert(i);
a=x^i;b=i;
break;
}
}
int k=;
for(int i=;i<v1.size();i++)
{
if(k>=(n-)/)break;
if(v1[i]==a||v2[i]==a||v1[i]==b||v2[i]==b)continue;
ans.insert(v1[i]);
ans.insert(v2[i]);
k++;
}
}
else if(n%==)
{
int a,b,c;
for(int i=;i<;i++)
{
for(int j=i+;j<;j++)
{
if((x^i^j)!=i&&(x^i^j)!=j)
{
ans.insert(x^i^j);
ans.insert(i);
ans.insert(j);
a=x^i^j;b=i;c=j;
break;
}
}
if(ans.size()!=)break;
}
int k=;
for(int i=;i<v1.size();i++)
{
if(k>=(n-)/)break;
if(v1[i]==a||v2[i]==a||v1[i]==b||v2[i]==b||v1[i]==c||v2[i]==c)continue;
ans.insert(v1[i]);
ans.insert(v2[i]);
k++;
}
}
else
{
int a,b,c,d;
for(int i=;i<;i++)
{
for(int j=i+;j<;j++)
{
for(int k=j+;k<;k++)
{
if((x^i^j^k)!=i&&(x^i^j^k)!=j&&(x^i^j^k)!=k)
{
ans.insert(x^i^j^k);
ans.insert(i);
ans.insert(j);
ans.insert(k);
a=x^i^j^k;b=i;c=j;d=k;
break;
}
}
if(ans.size()!=)break;
}
if(ans.size()!=)break;
}
int k=;
for(int i=;i<v1.size();i++)
{
if(k>=(n-)/)break;
if(v1[i]==a||v2[i]==a||v1[i]==b||v2[i]==b||v1[i]==c||v2[i]==c||v1[i]==d||v2[i]==d)continue;
ans.insert(v1[i]);
ans.insert(v2[i]);
k++;
}
}
for(auto x : ans)
cout<<x<<" ";
cout<<endl;
return ;
}
/******************** ********************/
C
D:交互题(永远是二分),有一个长度为n的01字符串,先输入n,查询是?+长度为n的01字符串,给出的结果是汉明距离(两个字符串不同的个数),要求在15次内找到一个0一个1
既然能保证有0和1,那么可以找到01串或者10串,用二分对于[m,r)如果有01串,那么l=m,否则r=m
one是1的个数,那么如何判断是否有01串呢,构造一个l到r是1的,其他都是0的字符串,假如l到r中只有0,那么结果就是one+(r-l+1),如果只有1,那么结果就是one-(r-l+1),这样有01就是one-(r-l+1)<k<one+(r-l+1)
#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; void debug(){cout<<-<<endl;} int n,one;
bool ok(int l,int r)
{
string s=string(n,'');
for(int i=l;i<=r;i++)
s[i]='';
cout<<"? "<<s<<endl;
cout.flush();
int a;
cin>>a;
return one-(r-l+)<a&&a<one+(r-l+);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cin>>n;
cout<<"? "<<string(n,'')<<endl;
cout.flush();
cin>>one;
int l=,r=n-;
while(l<r-)
{
int m=(l+r)/;
if(ok(m,r))l=m;
else r=m;
}
string s=string(n,'');
s[l]='';
cout<<"? "<<s<<endl;
cout.flush();
int a;
cin>>a;
if(a==one+)cout<<"! "<<l+<<" "<<l+<<endl;
else cout<<"! "<<l+<<" "<<l+<<endl;
cout.flush();
return ;
}
/********************
0011001100
********************/
D
Codeforces Round #435 (Div. 2) c+d的更多相关文章
- Codeforces Round #435 (Div. 2)【A、B、C、D】
//在我对着D题发呆的时候,柴神秒掉了D题并说:这个D感觉比C题简单呀!,,我:[哭.jpg](逃 Codeforces Round #435 (Div. 2) codeforces 862 A. M ...
- 【Codeforces Round #435 (Div. 2) A B C D】
CF比赛题目地址:http://codeforces.com/contest/862 A. Mahmoud and Ehab and the MEX ·英文题,述大意: 输入n,x(n,x& ...
- Codeforces Round #435 (Div. 2)
A. Mahmoud and Ehab and the MEX 题目链接:http://codeforces.com/contest/862/problem/A 题目意思:现在一个数列中有n个数,每个 ...
- D. Mahmoud and Ehab and the binary string Codeforces Round #435 (Div. 2)
http://codeforces.com/contest/862/problem/D 交互题 fflush(stdout) 调试: 先行给出结果,函数代替输入 #include <cstdio ...
- E. Mahmoud and Ehab and the function Codeforces Round #435 (Div. 2)
http://codeforces.com/contest/862/problem/E 二分答案 一个数与数组中的哪个数最接近: 先对数组中的数排序,然后lower_bound #include &l ...
- 【二分】Codeforces Round #435 (Div. 2) D. Mahmoud and Ehab and the binary string
题意:交互题:存在一个至少有一个0和一个1的长度为n的二进制串,你可以进行最多15次询问,每次给出一个长度为n的二进制串,系统返回你此串和原串的海明距离(两串不同的位数).最后要你找到任意一个0的位置 ...
- 【构造】【分类讨论】Codeforces Round #435 (Div. 2) C. Mahmoud and Ehab and the xor
题意:给你n,x,均不超过10^5,让你构造一个无重复元素的n个元素的非负整数集合(每个元素不超过10^6),使得它们的Xor和恰好为x. 如果x不为0: 随便在x里面找一个非零位,然后固定该位为0, ...
- Codeforces Round #435 (Div. 2) B (二分图) C(构造)
B. Mahmoud and Ehab and the bipartiteness time limit per test 2 seconds memory limit per test 256 me ...
- 【Codeforces Round #435 (Div. 2) A】Mahmoud and Ehab and the MEX
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 让x没有出现,以及0..x-1都出现就可以了. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/std ...
随机推荐
- 一篇搞定SQLAlchemy--关系对象映射
要使用SQLAlchemy,必须先下载这个模块 pip3 install sqlalchemy 或 pycharm File--> Settings-->project...-->P ...
- 卷积神经网络(CNN)的训练及代码实现
本文部分内容来自zouxy09的博客.谢谢.http://blog.csdn.net/zouxy09/article/details/9993371 以及斯坦福大学深度学习教程:http://ufld ...
- SPDY
转载SPDY 是什么 SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案).SPDY 协议旨在通过压缩.多路复用和优 ...
- linux各个文件夹作用
linux /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/ho ...
- vim常规操作
原文地址 三种模式 一般模式:可以进行复制.粘贴和删除等操作 编辑模式:按i或a进入编辑模式,按Esc回到一般模式 命令模式:按/或?或:进入命令模式,按Esc回到一般模式 移动操作 h j k l: ...
- mysql数据库补充知识1 安装数据库破解数据库密码已经创建用户
一.安装MYSQL数据库 1.yum安装 #二进制rpm包安装 yum -y install mysql-server mysql 2.源码安装 1.解压tar包 cd /software tar ...
- AFNetworking 和 ASIHTTPRequest
在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法, ...
- python 课堂笔记-for语句
for i in range(10): print("----------",i) for j in range(10): print("world",j) i ...
- 苹果终端wifi图标点亮慢和portal弹窗机制分析以及处理办法和建议
转:http://kms.h3c.com/View.aspx?id=52875 问题现象 在无线环境中经常碰到苹果终端连接无线后wifi图标无法点亮导致终端无法上网.在起portal的网络中认证页面无 ...
- nodejs数据接收body-parser中间件
给大家翻译一下npm上body-parser的资料 nodejs 的body数据解析中间件 插件作用:对于req.body属性,在操作数据前分析进来的请求体的插件 首先学习解析一个http处理 这篇文 ...