【随机化】【并查集】Gym - 100851J - Jump
题意:交互题,有一个长度为n(偶数)的二进制串,你需要猜不超过n+500次猜到它。如果你猜的串与原串相同的位数为n,那么会返回n,如果为n/2,那么会返回n/2,否则都会返回零。
先random,直到出现一个n/2为止,将此串视为a串。由于正态分布,肯定能在500次内查到。
然后枚举a的所有相邻元素,将相邻的元素取反后进行询问,如果返回n/2,说明相邻的这两位有一个是对的,一个是错的;如果返回不是n/2,说明这两位要么都对,要么都错。
于是用2-sat的思想,将每个元素拆点,由于是双向边,所以直接用并查集维护,同一个并查集里的全是对的/或者全是错的,最后所有元素都在两个集合中。所以最后只剩两种可能的情况了,再分别询问 一下就行了。
//fflush(stdout);
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
using namespace std;
int fa[2005];
int find(int x){
return x==fa[x] ? x : fa[x]=find(fa[x]);
}
int n,x;
char a[2005];
int Map(int x){
if(x<=n){
return x+n;
}
else{
return x-n;
}
}
int main(){
srand(233);
scanf("%d",&n);
for(int i=1;i<=n*2;++i){
fa[i]=i;
}
while(1){
for(int i=1;i<=n;++i){
putchar(a[i]=((rand()&1) ? '1' : '0'));
}
puts("");
fflush(stdout);
scanf("%d",&x);
if(x==n){
return 0;
}
if(x==n/2){
break;
}
}
a[n+1]='\0';
for(int i=1;i<n;++i){
a[i]=((a[i]-'0')^1)+'0';
a[i+1]=((a[i+1]-'0')^1)+'0';
puts(a+1);
fflush(stdout);
scanf("%d",&x);
if(x==n){
return 0;
}
if(x==n/2){
int f1=find(i),f2=find(i+1+n);
if(f1!=f2){
fa[f1]=f2;
}
f1=find(i+1),f2=find(i+n);
if(f1!=f2){
fa[f1]=f2;
}
}
else{
int f1=find(i),f2=find(i+1);
if(f1!=f2){
fa[f1]=f2;
}
f1=find(i+n),f2=find(i+1+n);
if(f1!=f2){
fa[f1]=f2;
}
}
a[i]=((a[i]-'0')^1)+'0';
a[i+1]=((a[i+1]-'0')^1)+'0';
}
for(int i=1;i<=n;++i){
putchar(find(i)==find(1) ? a[i] : ((a[i]-'0')^1)+'0');
}
puts("");
fflush(stdout);
scanf("%d",&x);
if(x!=n){
for(int i=1;i<=n;++i){
putchar(find(i)==find(1+n) ? a[i] : ((a[i]-'0')^1)+'0');
}
puts("");
fflush(stdout);
}
return 0;
}
【随机化】【并查集】Gym - 100851J - Jump的更多相关文章
- TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造
题意:首先你输入一个数字n(偶数)(n<=1000),电脑则自动生成一个长度为n的01字符串,你每次可以构造出一个长度为n的01字符串,输入给电脑后电脑进行判定,如果你的字符串与电脑的字符串完全 ...
- Codeforces Gym 100463E Spies 并查集
Spies Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Desc ...
- Gym - 100625G Getting Through 计算几何+并查集
http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...
- Gym 100814C Connecting Graph 并查集+LCA
Description standard input/output Statements Alex is known to be very clever, but Walter does not be ...
- Tree Restoration Gym - 101755F (并查集)
There is a tree of n vertices. For each vertex a list of all its successors is known (not only direc ...
- GYM 101173 F.Free Figurines(贪心||并查集)
原题链接 题意:俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化 贪心做法如果完全拆掉再重装,答案是p[i]和q[i]中不为0的值的个数.现在要求寻找最小步数,显然要减去一 ...
- Gym - 101243F Vitamins(思维+并查集)
题意 有三种药丸,白色W>红色R>蓝色B,给你m个约束条件,问你n个药丸的颜色,不能确定颜色输出‘?’ 题解 如果1<2<3,只要找到2就能确定1和3的颜色 如果2=4,只要确 ...
- Gym - 101550A Artwork (并查集在线做法)
题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...
- 【枚举】【并查集】Gym - 101243F - Vitamins
题意:有n片药,有三种颜色,白色比红色重,红色比蓝色重,给你一些它们之间的重量关系,比如1>3,2=4之类,问你它们的颜色,如果没法判断的输出?. 先并查集把等于号全缩起来,然后按照大于号建图, ...
随机推荐
- 2017ACM暑期多校联合训练 - Team 6 1001 HDU 6096 String (字符串处理 字典树)
题目链接 Problem Description Bob has a dictionary with N words in it. Now there is a list of words in wh ...
- Django之组合搜索组件(一)
什么是组合搜索呢? 比如你想买车,但手里只有10万块!所以你只能在10万块的车里挑选,但你喜欢黑色,因为觉得很高端大气上档次,说白了就是装逼杠杠的!之后售车姐给你拿了个表表,你看到了低于10万块且颜色 ...
- VC拷贝字符串到剪切板
] ="中华人民共和国"; DWORD dwLength = ; // 要复制的字串长度 HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLe ...
- python设计模式之迭代器与生成器详解(五)
前言 迭代器是设计模式中的一种行为模式,它提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.python提倡使用生成器,生成器也是迭代器的一种. 系列文章 python设计模 ...
- gunicorn之日志详细配置
gunicorn的日志配置 gunicorn的日志配置相关的常用参数有4个,分别是accesslog,access_log_format,errorlog,loglevel. accesslog:用户 ...
- NEERC2014
NEERC2014 A - Alter Board 题目描述:给出一个\(n \times m\)的国际象棋棋盘,每次选定一个矩形,使得矩形中的每个格子的颜色翻转,求出最少次数的方案使得最终棋盘只有一 ...
- 2017 SWERC
2017 SWERC A:Cakey McCakeFace 题目描述:有一个炉每次只能放一个蛋糕,炉的进口和出口各放了一个探测器,当放蛋糕进去时,进口的探测器会记录时刻,当蛋糕做好后,蛋糕从出口出来, ...
- Dev Express 安装
Dev Express 安装 点击DevExpressUniversalTrialComplete-20151209.exe开始安装 选择需要安装的产品 选择需要安装的产品目录,这里设置为D盘 开 ...
- 使用jolokia api监控ActiveMQ
jolokia api提供了一种通过HTTP访问JMX获得AMQ后台数据的一种方式,即Restful Api #!/usr/bin/env python # -*- coding:utf-8 -*- ...
- gc 调优记录
qps 10,0000 -Xms10240m -Xmx10240m -XX:NewRatio=5 -XX:SurvivorRatio=6 2017-12-19T15:10:14.539+0800: 1 ...