标签:puts stdout int next Game 棋子 Cooperative fflush Codeforces1137D
[Codeforces1137D]Cooperative Game
Tags:题解
题意
这是一道交互题。
给你一张下面这样的地图,由一条长为\(t\)的有向链和一个长为\(c\)的环构成。
现在你有\(10\)颗棋子,编号\(0\)到\(9\),你不知道\(t\)和\(c\)的值,你每次可以移动若干颗棋子。
请你输出方案,使得所有棋子走到环和链的交点处,并在走到时输出done
。
你每次可以输出next a b c ...
,交互库将返回k a1 a2 ... ak
表示当前有\(k\)个位置有棋子,\(ai\)表示一个字符串,表示第\(i\)个位置的棋子编号是什么。
你的移动次数不能超过\(3(t+c)\),\(t+c\le 1000\)。
题解
神仙题,一直在想\(10\)颗棋子的二进制意义,然而\(t\)和\(c\)再大也没有关系。
步骤:
选定两颗棋子\(0\),\(1\),\(0\)每次都移动,\(1\)每两次移动一次。
走了\(2t\)步之后\(1\)刚好到达交点\(T\),把环按照以\(T\)为\(1\)按边的方向依次编号,则此时\(0\)在环上的\(t\)位置。
这时\(0\)还需要\(c-t\)步追上(到) \(1\),追上的位置是\(c-t\)。
然后惊奇地发现:把所有点同时走\(t\)步就可以让所有点都在\(T\)上了!
服了服了。这场掉分掉得爽啊(第一次掉分)
代码
#include<iostream>
using namespace std;
char s[100];
int In() {int x,p;scanf("%d",&x);for(p=x;p;p--) scanf("%s",s);return x;}
int main()
{
while(1)
{
puts("next 0");fflush(stdout);In();
puts("next 0 1");fflush(stdout);
if(In()==2) break;
}
while(1)
{
puts("next 0 1 2 3 4 5 6 7 8 9");
fflush(stdout);if(In()==1) break;
}
puts("done");fflush(stdout);
}
标签:puts,stdout,int,next,Game,棋子,Cooperative,fflush,Codeforces1137D 来源: https://www.cnblogs.com/xzyxzy/p/10512730.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。