[Codeforces1137D]Cooperative Game

[Codeforces1137D]Cooperative Game

Tags:題解ios


題意

這是一道交互題。
給你一張下面這樣的地圖,由一條長爲\(t\)的有向鏈和一個長爲\(c\)的環構成。

如今你有\(10\)顆棋子,編號\(0\)\(9\),你不知道\(t\)\(c\)的值,你每次能夠移動若干顆棋子。
請你輸出方案,使得全部棋子走到環和鏈的交點處,並在走到時輸出doneoop

你每次能夠輸出next a b c ...,交互庫將返回k a1 a2 ... ak表示當前有\(k\)個位置有棋子,\(ai\)表示一個字符串,表示第\(i\)個位置的棋子編號是什麼。
你的移動次數不能超過\(3(t+c)\)\(t+c\le 1000\)spa

題解

神仙題,一直在想\(10\)顆棋子的二進制意義,然而\(t\)\(c\)再大也沒有關係。code

步驟:
選定兩顆棋子\(0\),\(1\)\(0\)每次都移動,\(1\)每兩次移動一次。
走了\(2t\)步以後\(1\)恰好到達交點\(T\),把環按照以\(T\)\(1\)按邊的方向依次編號,則此時\(0\)在環上的\(t\)位置。
這時\(0\)還須要\(c-t\)步追上(到) \(1\),追上的位置是\(c-t\)blog

而後驚奇地發現:把全部點同時走\(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);
}
相關文章
相關標籤/搜索