TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造
Problem J. Jump
Input file: standard input
Output file: standard output
Consider a toy interactive problem OneMax which is defined as follows. You know an integer n and
there is a hidden bit string S of length n. The only thing you may do is to present the system a bit
string Q of length n, and the system will return the number OneMax(Q) — the number of bits which
coincide in Q and S at the corresponding positions. The name of OneMax problem stems from the fact
that this problem is simpler to explain when S = 111 . . . 11, so that the problem turns into maximization
(Max) of the number of ones (One).
When n is even, there is a similar (but harder) interactive problem called Jump. The simplest way to
describe the Jump is by using OneMax:
Jump(Q) = (
OneMax(Q) if OneMax(Q) = n or OneMax(Q) = n/2;
0 otherwise.
Basically, the only nonzero values of OneMax which you can see with Jump are n (which means you’ve
found the hidden string S) and n/2.
Given an even integer n — the problem size, you have to solve the Jump problem for the hidden string
S by making interactive Jump queries. Your task is to eventually make a query Q such that Q = S.
Interaction protocol
First, the testing system tells the length of the bit string n. Then, your solution asks the queries and
the system answers them as given by the Jump definition. When a solution asks the query Q such that
Q = S, the system answers n and terminates, so if your solution, after reading the answer n, tries reading
or writing anything, it will fail.
The limit on the number of queries is n + 500. If your solution asks a (n + 501)-th query, then you will
receive the “Wrong Answer” outcome. You will also receive this outcome if your solution terminates too
early.
If your query contains wrong characters (neither 0, nor 1), or has a wrong length (not equal to n), the
system will terminate the testing and you will receive the “Presentation Error” outcome.
You will receive the “Time Limit Exceeded” outcome and other errors for the usual violations.
Finally, if everything is OK (e.g. your solution finds the hidden string) on every test, you will receive the
“Accepted” outcome, in this case you will have solved the problem.
Input
The first line of the input stream contains an even number n (2 ≤ n ≤ 1000). The next lines of the input
stream consist of the answers to the corresponding queries. Each answer is an integer — either 0, n/2,
or n. Each answer is on its own line.
Output
To make a query, print a line which contains a string of length n which consists of characters 0 and 1
only. Don’t forget to put a newline character and to flush the output stream after you print your query.
Sample input and output
standard input standard output
题意:首先你输入一个数字n(偶数)(n<=1000),电脑则自动生成一个长度为n的01字符串,你每次可以构造出一个长度为n的01字符串,输入给电脑后电脑进行判定,如果你的字符串与电脑的字符串完全吻合,电脑返回n,如果只有一半吻合,电脑返回n/2,此外电脑返回0;你最多询问n+500次;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <time.h>
#include <algorithm>
#include <set>
#define MM(a,b) memset(a,b,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
using namespace std;
const int N=1e3+8; char a[N];
int flag[N]; void revse(int i)
{
a[i]=!(a[i]-'0')+'0';
} int main()
{
int n,x;
while(~scanf("%d",&n))
{
MM(a,'\0');
MM(flag,0);
srand(time(0));
while(1)
{
for(int i=1;i<=n;i++) a[i]=rand()%2+'0';
printf("%s\n",a+1);
fflush(stdout);
scanf("%d",&x);
if(x==n||x==n/2) break;
}
if(x==n/2)
{
revse(1);
for(int j=2;j<=n;j++)
{
revse(j);
printf("%s\n",a+1);
fflush(stdout);
scanf("%d",&x);
if(x==n) break;
else if(x==n/2) flag[j]=1;
revse(j);
}
if(x!=n)
{
revse(1);
for(int j=2;j<=n;j++) if(flag[j]) revse(j);
printf("%s\n",a+1);
fflush(stdout);
scanf("%d",&x);
if(x!=n)
{
for(int j=2;j<=n;j++) if(flag[j]) revse(j);
revse(1);
for(int j=2;j<=n;j++) if(!flag[j]) revse(j);
printf("%s\n",a+1);
fflush(stdout);
scanf("%d",&x);
}
}
}
}
return 0;
}
分析:简直神思路。首先不停播下随机数种子生成一个排列,直到系统返回n/2;得到字符串S(并不会很多,用排列组合算下) 然后将第一位数字取反,依次枚举j从2-n位,进行取反。如果最后系统还是返回n/2,说明S中第一位和第j位跟电脑的字符串匹配模式是相同的。
http://blog.csdn.net/miracle_ma/article/details/52214284
TTTTTTTTTTTTTTTTT Gym 100851J Jump 构造的更多相关文章
- 【随机化】【并查集】Gym - 100851J - Jump
题意:交互题,有一个长度为n(偶数)的二进制串,你需要猜不超过n+500次猜到它.如果你猜的串与原串相同的位数为n,那么会返回n,如果为n/2,那么会返回n/2,否则都会返回零. 先random,直到 ...
- Gym - 100851J: Jump(交互+构造+(大胆瞎搞)))
题意:给定长度为N的01串,现在让你猜这个串,猜的次数要不超过N+500次. 每次你猜一个串,系统会返回N/2,或N,或0.当且当有N/2个位置猜对,N个位置猜对,其他. 思路:因为信息不多,没有关联 ...
- Codeforces Gym 100531I Instruction 构造
Problem I. Instruction 题目连接: http://codeforces.com/gym/100531/attachments Description Ingrid is a he ...
- Tree Reconstruction Gym - 101911G(构造)
---恢复内容开始--- Monocarp has drawn a tree (an undirected connected acyclic graph) and then has given ea ...
- Gym - 101142J Java2016 (构造)
题意:给定一个数字,让你构造成一些表达式,最后结果是该数字的概率要大于50%. 析:我们可以把一个数分解是2的多少次幂,然后加起来就好. 代码如下: #pragma comment(linker, & ...
- UVaLive 6588 && Gym 100299I (贪心+构造)
题意:给定一个序列,让你经过不超过9的6次方次操作,变成一个有序的,操作只有在一个连续区间,交换前一半和后一半. 析:这是一个构造题,我们可以对第 i 个位置找 i 在哪,假设 i 在pos 位置, ...
- Painting the Fence Gym - 101911E(构造)
There is a beautiful fence near Monocarp's house. The fence consists of nn planks numbered from left ...
- Codeforces Gym 100187K K. Perpetuum Mobile 构造
K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
- Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉
Problem H. Hard TestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
随机推荐
- Devexpress WinForm TreeList的三种数据绑定方式(DataSource绑定、AppendNode添加节点、VirtualTreeGetChildNodes(虚拟树加载模式))
第一种:DataSource绑定,这种绑定方式需要设置TreeList的ParentFieldName和KeyFieldName两个属性,这里需要注意的是KeyFieldName的值必须是唯一的. 代 ...
- WPF入门(1)——DataContext
在WPF中,应用程序有两层:UI层和Data层.这里新建一个项目说明哪些是UI层,哪些是数据层. UI层很明显,就是用户看到的界面.但是数据层并不是下图所示: 上图中是UI层view的后台代码.当然, ...
- 怎样快捷获取元素节点body
1. 使用: document.body document.body.nodeName; // "BODY" 2. 使用: document.getElementsByTagNam ...
- Spring ——获取IOC容器时,构造方法、set方法、类方法执行顺序
1,首先,我们在ApplicationContext.xml中会写下下面类的标示: <bean id="helloword" class="com.xt.frist ...
- sqlserver查询数据的所有表名和行数及空间占用量
//查询所有表名 select name from sysobjects where xtype='u' --modify_date指表结构最后更新日期,并非数据最后更新日期SELECT na ...
- asp.net core In Docker(Image)
原文地址:https://www.cnblogs.com/stulzq/p/9059108.html 大家应该知道目前.NET Core(2.0)还是没有System.Drawing程序集,如果我们要 ...
- JS的日期的知识与格式化
需要知道的JS的日期的知识,都在这了 https://juejin.im/post/5d12b308f265da1b7c612746?utm_source=gold_browser_extension ...
- Docker搭建Gitlab代码管理平台
一.Gitlab的安装 宿主机环境: CentOS 7 docker docker-compose 1.查找镜像 docker search gitlab 2.拉取镜像 docker pull git ...
- Windows 下 nvm, node, npm 的下载、安装与配置
主要解决的问题 下载安装完 nvm 和 node 后,缺失 npm 文件 执行 jasmine 等命令时提示「不是内部或外部命令...」及全局变量的设置 下载与安装 一.nvm github 下载地址 ...
- 选择webpack这条路,我踩过的坑
在http://www.jianshu.com/p/42e11515c10f这篇文章,我重新学习了一下webpack. 一.json文件里面不应该含有注释,否则会报错 本来我的json文件长这个样子: ...