Tags:題解ios
這是一道交互題。
給你一張下面這樣的地圖,由一條長爲\(t\)的有向鏈和一個長爲\(c\)的環構成。
如今你有\(10\)顆棋子,編號\(0\)到\(9\),你不知道\(t\)和\(c\)的值,你每次能夠移動若干顆棋子。
請你輸出方案,使得全部棋子走到環和鏈的交點處,並在走到時輸出done
。oop
你每次能夠輸出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); }