题意:交互题,有一个长度为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的更多相关文章

  1. TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造

    题意:首先你输入一个数字n(偶数)(n<=1000),电脑则自动生成一个长度为n的01字符串,你每次可以构造出一个长度为n的01字符串,输入给电脑后电脑进行判定,如果你的字符串与电脑的字符串完全 ...

  2. Codeforces Gym 100463E Spies 并查集

    Spies Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Desc ...

  3. Gym - 100625G Getting Through 计算几何+并查集

    http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...

  4. Gym 100814C Connecting Graph 并查集+LCA

    Description standard input/output Statements Alex is known to be very clever, but Walter does not be ...

  5. 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 ...

  6. GYM 101173 F.Free Figurines(贪心||并查集)

    原题链接 题意:俄罗斯套娃,给出一个初始状态和终止状态,问至少需要多少步操作才能实现状态转化 贪心做法如果完全拆掉再重装,答案是p[i]和q[i]中不为0的值的个数.现在要求寻找最小步数,显然要减去一 ...

  7. Gym - 101243F Vitamins(思维+并查集)

    题意 有三种药丸,白色W>红色R>蓝色B,给你m个约束条件,问你n个药丸的颜色,不能确定颜色输出‘?’ 题解 如果1<2<3,只要找到2就能确定1和3的颜色 如果2=4,只要确 ...

  8. Gym - 101550A Artwork (并查集在线做法)

    题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...

  9. 【枚举】【并查集】Gym - 101243F - Vitamins

    题意:有n片药,有三种颜色,白色比红色重,红色比蓝色重,给你一些它们之间的重量关系,比如1>3,2=4之类,问你它们的颜色,如果没法判断的输出?. 先并查集把等于号全缩起来,然后按照大于号建图, ...

随机推荐

  1. java规范之checkstyle

    1. 概述 随着中心的代码规范的建立和实施,项目组对代码规范要求,以及软件工程师们对自身代码的编写规范重要性的认知,“代码规范”已经成为了中心的一个“热词”.然后怎么才能写出有规范的代码,怎么才能养成 ...

  2. About configuration center of Apollo

    A comparison among different configuration management tools Use of Apollo configuration management p ...

  3. Linux下命令lrzsz

    lrzsz是什么 在使用Linux的过程中,难免少不了需要上传下载文件,比如往服务器上传一些war包之类的,之前都是使用winSCP,lrzsz是一个更方便的命令,可以直接在Linux中输入命令,弹出 ...

  4. GSON转换日期数据为特定的JSON数据

    通过JSON传递数据的时候经常需要传递日期,Java中可以通过GSON将日期转换为特定格式的JSON数据. 1.普通的GSON转换日期 public void query(HttpServletReq ...

  5. Mysql储存过程7: case

    #用在储存过程中: create procedure k() begin declare number int; )); case number then select '>0'; else s ...

  6. 【转载】C#异常Retry通用类

    //Retry机制 public static class Retry { /// <summary> /// 重试零个参数无返回值的方法 /// </summary> /// ...

  7. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  8. 【bzoj4293】【PA2015】Siano

    如题,首先可以考虑相对大小是不变的. 那么先sort,之后每次在线段树上二分即可. #include<bits/stdc++.h> typedef long long ll; using ...

  9. ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed

    报错内容: TASK [activemq : jvm configuration] ********************************************************** ...

  10. jquery如何获取第一个或最后一个子元素

      jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children(" ...