就是你有10個棋子,有一條邊數爲t的鏈和一個邊數爲c的環(t和c未知)組成的有向圖,每次操做能夠讓一些棋子移動一步,讓你在不超過\(3 \times (t+c)\)次操做下讓全部點移動到鏈和環鏈接的點處
首先咱們考慮兩個點動,剩下的點走t步走到終點
設0每兩次操做走一次,1每次操做都走
當0走到鏈接處時,花費了2t步,還剩(t+3c)步
標記該點爲0,而後按順序給每一個點按1~c-1標點
顯然1的位置在(t%c)處
則1追上0須要2*(c-t%c)步
此時的位置應該是(c-t%c)
而再走t步的位置就回到了0
總步數(3t+(2c-t%c))<\(3 \times (t+c)\)oop
#include <cstdio> #include <algorithm> #define open(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout); using namespace std; char s[21]; int pd() { int t; scanf("%d",&t); for (int i=1;i<=t;i++) scanf("%s",s); return t; } int main() { open("cooperative"); while (true) { printf("next 0 1\n"); fflush(stdout); pd(); printf("next 1\n"); fflush(stdout); if (pd()==2) break; } while (true) { printf("next 0 1 2 3 4 5 6 7 8 9\n"); fflush(stdout); if (pd()==1) { printf("done"); fflush(stdout); exit(0); } } return 0; }