题解 CF1137D 【Cooperative Game】
用Floyd判圈法。即一个人每走一步,则另一个人走两步。由于有环,所以在某一时刻,跑得快的一定会追上跑得慢的,且此时跑的慢的一定没跑满一圈。
假设跑得慢的走了
忽略在链上的
转化得
当前这两个人所处的位置再走
由于其他在起点的人走
一共花费的步数为
Code:
#include<cstdio>
int group[11],step1=1,step2=2;
inline void update(){
int x;
static char s[12];
fflush(stdout),scanf("%d",&x);
for(int i=1;i<=x;++i){
scanf("%s",s);
for(int j=0;s[j];++j)group[s[j]^'0']=i;
}
}
int main(){
puts("next 0"),update();
puts("next 0 1"),update();
for(int t=1;;++t){
if(t&1)puts("next 0 1"),++step1,++step2;else puts("next 0"),++step2;
update();
if(group[0]==group[1])break;
}
while(group[0]!=group[2])
puts("next 0 1 2 3 4 5 6 7 8 9"),update();
puts("done"),fflush(stdout);
return 0;
}