【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)
题目链接:
http://codeforces.com/gym/100851
题目大意:
系统里生成一个字符串C,一开始告诉你字符串的长度N(偶数)。接着你需要在n+500次内猜出这个字符串是什么。
每次你可以输出一个长度为N的字符串S,系统根据你输出的字符串S和C的匹配数量输入一个数,若为n/2则输入n/2,若为n则输出n,否则输入0。
只要一猜对字符串就要结束程序(即输入的数为n)。如果询问次数超过n+500则出错。每次输出完要fflush(stdout).
题目思路:
【模拟】
这题真的很有意思。根据概率随机500次出现至少一次n/2或n的概率非常高(99.999%以上)
于是先随机生成S串询问,如果找到不是0的回答则:
假设S的第一个字符正确,每次将第I个字符和第一个字符取反,再询问取反后的字符,如果得到0的回答则表明取反后的I位是错误的,如果为n/2则取反后的I位正确,把相应正确的答案填到C里,把S取反的两位还原后做I+1位。(假设第一个字符正确,取反后错误,目前正确的个数为n/2-1,如果第I位取反后还是n/2个正确则表明取反后把当前这位改对了,否则就是改错了原先是对的)
总共枚举N次即可得到答案。如果最终答案C还不对,则是前提条件(S的第一个字符正确)错了,把整个串都取反即使正解。(可以看作类似映射,从0->0,1->1变为0->1,1->0,各个字符之间的同异是不会改变的。)
需要每次判断当前回答是不是n,是n就结束。
//
//by coolxxx
//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<iomanip>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<bitset>
#include<memory.h>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include<stdbool.h>
#include<math.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define eps (1e-8)
#define J 10
#define mod 1000000007
#define MAX 0x7f7f7f7f
#define PI 3.14159265358979323
#define N 1004
using namespace std;
typedef long long LL;
int cas,cass;
int n,m,lll,ans;
char s[N],c[N];
int main()
{
#ifndef ONLINE_JUDGE
// freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
// for(scanf("%d",&cass);cass;cass--)
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
// while(~scanf("%s",s+1))
// while(~scanf("%d",&n))
{
srand(time());
scanf("%d",&n);
m=;
while(!m)
{
for(i=;i<n;i++)s[i]=(rand()&)?'':'';
puts(s);
fflush(stdout);
scanf("%d",&m);
}
if(m==n)return ;
c[]=s[];
s[]=''+''-s[];
for(i=;i<n;i++)
{
s[i]=''+''-s[i];
puts(s);
fflush(stdout);
scanf("%d",&m);
if(m==n)return ;
if(m)c[i]=s[i];
else c[i]=''+''-s[i];
s[i]=''+''-s[i];
}
puts(c);
fflush(stdout);
scanf("%d",&m);
if(m==n)return ;
for(i=;i<n;i++)c[i]=''+''-c[i];
puts(c);
fflush(stdout);
scanf("%d",&m);
}
return ;
}
/*
// //
*/
【模拟】NEERC15 J Jump(2015-2016 ACM-ICPC)(Codeforces GYM 100851)的更多相关文章
- HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)
摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...
- 2016 ACM ICPC Asia Region - Tehran
2016 ACM ICPC Asia Region - Tehran A - Tax 题目描述:算税. solution 模拟. B - Key Maker 题目描述:给出\(n\)个序列,给定一个序 ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元
hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K ...
- 2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分
I Count Two Three Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp
QSC and Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp
odd-even number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1002/HDU 5869
Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873
Football Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)
Friends and Enemies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
随机推荐
- 了解php面向对象
php 三大特性:封装.继承.多态,一直以来只知道其字,却不大了解其意思和具体使用,只是对继承有大概的了 解,优点是代码的重用性,oop概念,记得有一次我去面试,人家问我什么是oop,然后我答了很多什 ...
- 实现Android K的伪沉浸式
在Android 5.0之后引入了MD风格,从而状态栏沉浸也成为了一种设计习惯.而停留在之Android L之前的Android系统则不能直接实现沉浸式,这里就介绍一下如何实现Android K系列的 ...
- Echarts使用随笔(1)-Echarts中markPoint的使用(静态、动态)-effect
先看一段关于初始化Echart js的使用 myChart = echarts.init(document.getElementById('mainChart')); var o ...
- linq学习笔记:将List<T> 转换为 Dictionary<T Key,T Value>
运用Linq,将List<T> 转换为 Dictionary<T Key,T Value> 即:List<T> ToDictionary<T Key,T V ...
- NSArray 跟 NSMutableArray 使用 区别
NSArray 可变数组 一.NSArray是静态数组,创建后数组内容及长度不能再修改. 实例: //用arrayWithObjects初始化一个不可变的数组对象. //初始化的值之间使用逗号分开,以 ...
- jq 图片上传
1.html <input type="file" class="ImgInput" name="ImgInput"/> 2.j ...
- 查看Jquery版本
1. $.fn.jquery > "1.11.1" 2. 通过这样可以 判断一个对象是否是jquery对象!!
- 【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)
试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共 ...
- 《Python 二三事》——python学习必看(转载)
面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题. 原文出处 原文作者:八八年出生的男性,互联网上常用id是 jagttt .目前正从事 IT 行业的工作.业余爱好是动漫游加电 ...
- phpcms 如何获取文章
请求地址http://127.0.0.1/phpcms/index.php?m=content&c=index&a=show&catid=6&id=8 先来判断地址对应 ...