CF1137D Cooperative Game 题解


Codeforces
Luogu

Description.

交互。
有一个 \(\rho\) 形的图,基环内向树,尾巴长度是 \(t\),换长是 \(c\)。
\(t\) 和 \(c\) 不知道,刚开始在尾巴一段有 \(10\) 个棋子。
每次你可以移动若干个棋子,交互器返回当前所有的在同一格子内的棋子。
最后要求所有棋子都在环“接口”处。

Solution.

神仙构造题。
\(0,1\) 一个跳 \(2\) 步一个跳 \(1\) 步。
然后跳 \(t\) 次后一个在交界处一个在后面 \(t\) 个位置。
需要再跳 \(c-t\) 后才能追上。
此时所有点再跳 \(t\) 次就都在初始位置了。

Coding.

点击查看代码
//Coded by Kamiyama_Shiki on 2021.11.19 {{{
//是啊……你就是那只鬼了……所以被你碰到以后,就轮到我变成鬼了
#include
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;typedef long long ll;
templateinline void read(T &x)
{
	x=0;char c=getchar(),f=0;
	for(;c<48||c>57;c=getchar()) if(!(c^45)) f=1;
	for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	f?x=-x:x;
}
templateinline void read(T &x,L&...l) {read(x),read(l...);}//}}}
const int N=100005;
inline int ask() {int w;ll k;fflush(stdout),read(w);for(int j=1;j<=w;j++) read(k);return w;}
int main()
{
	while(1) {puts("next 0"),ask(),puts("next 0 1");if(ask()==2) break;}
	while(1) {puts("next 0 1 2 3 4 5 6 7 8 9");if(ask()==1) break;}
	return puts("done"),fflush(stdout),0;
}