首页 > 其他分享 >Gym - 100851J [随机+01集合]

Gym - 100851J [随机+01集合]

时间:2023-05-31 10:05:26浏览次数:52  
标签:01 相同 int Gym 原串 100851J 随机 mx


题目链接:https://vjudge.net/problem/Gym-100851J

 

解题思路:

出题故意不给501次,就是要让我们去随机找出值为n/2的串,每次最坏的情况随机一个串值是n/2的概率是:

Gym - 100851J [随机+01集合]_i++

约等于0.022。那我们随机400不中的概率是

Gym - 100851J [随机+01集合]_i++_02

 = 0.000309336,概率非常低,所以几乎是可以找到的。

找到之后s串后,同时改变0和i位置的值,询问此时值是否还是n/2,如果是,也就是说0和i是对立的,一个如果和原串相同,那么另一个就不同。如果不是,说明他们是相同的,相同一起相同,不相同一起不相同。

最后我们再枚举0位置的值是0或者1就可以找出原串了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
const int mx = 1e3+10;
int n,m,K;
char s[mx],ts[mx];	
int vis[mx];
int fa[mx*2];
int main(){
	srand(time(NULL));
	scanf("%d",&n);
	for(int i=0;i<n;i++) s[i] = '0';
	s[n] = 0,fa[0] = 1;
	bool ok = 0;
	int v;
	while(1){
		for(int i = 0; i < n; i++)
			s[i] =rand()%2+'0';
		printf("%s\n",s);
		fflush(stdout);
		scanf("%d",&v);
		if(v==n/2)	break;
		else if(v==n){
			ok = 1;
			break;
		}
	}
	if(ok) return 0; 
	char c1 = s[0];
	if(c1=='0') s[0] = '1';
	else s[0] = '0';
	for(int i=1;i<n;i++){
		char c2 = s[i];
		if(c2=='0') s[i] = '1';
		else s[i] = '0';
		printf("%s\n",s);
		fflush(stdout);
		scanf("%d",&v);
		if(v==n/2) fa[i] = 0;
		else fa[i] = 1;
		s[i] = c2;
	}
	s[0] = c1,ts[n] = 0;
	for(int i=0;i<n;i++){
		if(fa[i])
			ts[i] = s[i];
		else
			ts[i] = ((s[i]-'0')^1)+'0';
	}
	printf("%s\n",ts);
	fflush(stdout);
	scanf("%d",&v);
	if(v==n) return 0;
	for(int i=0;i<n;i++){
		if(fa[i]){
			ts[i] = ((s[i]-'0')^1)+'0';
		}else{
			ts[i] = s[i];
		}
	}
	printf("%s\n",ts);
	fflush(stdout);
	scanf("%d",&v);
	return 0;
}

 

标签:01,相同,int,Gym,原串,100851J,随机,mx
From: https://blog.51cto.com/u_12468613/6384506

相关文章

  • Gym - 100851L [二分+线性推导]
    题目链接:https://vjudge.net/problem/Gym-100851L 解题思路:根据题目知道,墙的两边是不能放石头的,所以最终的结果肯定会收到两边墙的限制,从而使得答案不会超过1e9+1e5。此外我们再去二分最大高度,一个明显的结论就是以i为最高点建墙的话最少花费肯定是建一个金字塔形的墙面。但由于......
  • Gym - 100519I [NONE]
    题目链接:https://vjudge.net/problem/Gym-100519I 解题思路:先挂在这里#include<bits/stdc++.h>#defineinf0x3f3f3f3fusingnamespacestd;typedeflonglongll;constintmx=3e5+10;boolvis[mx];inttop,pri[mx];voidinit(){ for(inti=2;i<mx;i++){ if(!vis[i......
  • 2019 年百度之星·程序设计大赛 - 初赛三[1-3]
    题目链接:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=863 A.#include<bits/stdc++.h>usingnamespacestd;constintmx=2e5+10;constintmod=1e9+7;typedeflonglongll;intmain(){intt;scanf("%d",&t);wh......
  • 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 201
    题目链接:https://vjudge.net/contest/339284#overview A.Numbers待做B.BrokenWatchs=input()s=s.split("")A,B,C,N=list(map(int,s))n=(N-1)//2ret=N*N*N-3*N*(n)*(n-1)-N-3*N*(N-1)ans=retmod=1<<64if(A==BandB==C):......
  • 4543: [POI2014]Hotel加强版[树形DP+长链剖分]
    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4543 解题思路:长链剖分定义:f[i][j]表示以i为根节点的子树,有多少个节点和i的距离是j的.g[i][j]表示以i为根节点的子树,在子树外一个距离i为j的点可以跟i子树内的两个点组成两两相等的方案数.那么就有:f[u][j+1]+=f[v......
  • Flask013_宏和 import 语句
    宏 forms.html1{%macroinput(name,value="",type="text")%}2<inputtype="{{type}}"value="{{value|escape}}"name="{{name}}">3{%endmacro%}45{%macrotextarea(name,value="&q......
  • git (本地仓库)和(远程仓库)之间的代码推送:013
    这里先说明一下循序:1.创建(远程仓库)和(本地仓库)2.创建(远程仓库)和(本地仓库)之间的链接3.将(本地仓库)的代码推通过命令送到(远程仓库);将(本地仓库)的代码通过(TortoiseGit小乌龟)推送到(远程仓库)   1.创建(远程仓库)和(本地仓库),我这里已经创建好了  2.创建(远程仓库)和(本地仓......
  • 题解 AT_nikkei2019ex_e【コラッツ問題】
    啥玩意,诈骗题还能这么诈骗。\(f(X)\)就是角谷猜想(冰雹猜想)所需的步数。根据角谷猜想,定义函数\(g\):\[g(X)=\begin{cases}\frac{X}{2},&2\midX\\3X+1,&2\nmidX\end{cases}\]则显然有\(f(g(X))=f(X)-1\)。样例二已经给出了\(f(X)=1000\)的解\(X=1789997546303\),而\(P......
  • Revit二次开发系列教程01-如何在Revit中输出Hello World
    目录01项目环境准备02代码示例03输出示例04总结05源码地址01项目环境准备A.开发使用的软件:Revit2021、VisualStudio2022B.将源代码(BlogRevit\AddIns\)文件夹下的文件拷贝至C:\ProgramData\Autodesk\Revit\Addins\2021其中AddInManager插件作用是不重启Revit,即可加载自......
  • [NOIP2001 普及组] 装箱问题
    [NOIP2001普及组]装箱问题题目描述有一个箱子容量为\(V\),同时有\(n\)个物品,每个物品有一个体积。现在从\(n\)个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。输入格式第一行共一个整数\(V\),表示箱子容量。第二行共一个整数\(n\),表示......