CF1137D Cooperative Game 题解
Link.
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;
}