#P1637. 陈千语不是啥龙 [EGOI 2025 Dark Ride]

陈千语不是啥龙 [EGOI 2025 Dark Ride]

題目背景

粉色奶龍和啥龍在van遊戲

Alt text

題目

啥龍面前有 NN 個倉庫取貨口,從左到右編號為 00N1N-1 ,每個取貨口可以指定輸出兩種礦物之一: 源礦 或 藍鐵礦。取貨口連接著一個輸送帶系統,會把出貨口的輸出按照一定順序打亂並傳送到 NN 個輸出口,但是啥龍並不知道這個順序。輸出口從左到右編號為 00N1N-1,每個輸出口前有一個速凍仔。

粉色奶龍會讓速凍仔從左到右報數,報數規則如下:

  • 最左邊的速凍仔報 00
  • 對於其他速凍仔,如果自己面前的礦物與左邊相鄰的速凍仔面前的礦物不同,則報左邊速凍仔的報數加 11;否則報與左邊相同的數。

然後粉色奶龍會告訴啥龍最後一個速凍仔報了什麼數。

啥龍可以多次進行實驗:每次她可以自由設定所有輸入口的礦物種類,然後得到最後一個速凍仔的報數。她的目標是確定兩個端點輸出口(輸出口 00 和輸出口 N1N-1)對應哪兩個取貨口。

由於啥龍的智商超群,所以請來了管理員你來狐假虎威幫助她贏得遊戲。

交互方式

  • 你的程式應首先讀取一行包含整數 NN:倉庫取貨口的數量。
  • 然後,你的程式應與互動器互動。要開始一次實驗,你應輸出一行以問號 ? 開頭,然後是一個長度為 NN 的字串,由 00 (原礦)和 11 (藍鐵礦)組成,表示你如何設定 NN 個取貨口的輸出。然後,你的程式應讀取一個整數 ll (0l<N)(0 \leq l < N),即最後一個速凍仔報的數。
  • 當你想要回答時,輸出一行以驚嘆號 ! 開頭,後面跟著兩個整數 AABB (0A,B<N)(0\leq A,B < N)。為了讓你的答案被接受,這必須是對應輸出口 00 和輸出口 N1N-1 的取貨口編號,順序不限。之後,你的程式應退出。

互動器是非自適應的,這意味著取貨口和輸出口的對應關係在互動開始前就已確定。

請確保在每次實驗後刷新標準輸出,否則你的程式可能會被判定為超時。在 Python 中,只要使用 input() 讀取行,輸出會自動刷新。在 C++ 中,cout << endl; 除了輸出換行外還會刷新;如果使用 printf,請使用 fflush(stdout)

範例 1

隱藏的對應關係:

取貨口 輸出口
00 2
11 1
22 0
33 3
44 4
互動器輸出 你的輸出
5
? 10001
3
? 10110
3
! 2 4

在範例 1 中,有 55 個取貨口。 第一次實驗中,速凍仔(從左到右)面前的礦物分別是 源礦、源礦、藍鐵礦、源礦、藍鐵礦,報的數為 [0,0,1,2,3][0, 0, 1, 2, 3],所以互動器輸出 33。 第二次實驗中,速凍仔(從左到右)面前的礦物分別是 藍鐵礦、源礦、藍鐵礦、藍鐵礦、源礦,報的數為 [0,1,2,2,3][0, 1, 2, 2, 3],所以互動器輸出 33。 最後啥龍得出對應輸出口 00 和輸出口 N1N-1 的取貨口是第 22 和 第 44 個取貨口(次序不限),! 2 4! 4 2 都是可接受的答案。

範例 2

隱藏的對應關係:

取貨口 輸出口
00 2
11 0
22 1
互動器輸出 你的輸出
3
? 111
0
? 110
2
? 000
0
! 1 0

在範例 2 中,有 33 個取貨口。 第一次實驗中,速凍仔(從左到右)面前的礦物分別是 藍鐵礦、藍鐵礦、藍鐵礦,報的數為 [0,0,0][0, 0, 0],所以互動器輸出 00。 第二次實驗中,速凍仔(從左到右)面前的礦物分別是 藍鐵礦、源礦、藍鐵礦,報的數為 [0,1,2][0, 1, 2],所以互動器輸出 22。 第三次實驗中,速凍仔(從左到右)面前的礦物分別是 源礦、源礦、源礦,報的數為 [0,0,0][0, 0, 0],所以互動器輸出 00。 最後啥龍得出對應輸出口 00 和輸出口 N1N-1 的取貨口是第 00 和 第 11 個取貨口(次序不限),! 0 1! 1 0 都是可接受的答案。

範例 3

隱藏的對應關係:

取貨口 輸出口
00 0
11 1
22 2
33 3
互動器輸出 你的輸出
4
? 1010
3
! 0 3

在範例 3 中,有 44 個取貨口。 第一次實驗中,速凍仔(從左到右)面前的礦物分別是 藍鐵礦、源礦、藍鐵礦、源礦,報的數為 [0,1,2,3][0, 1, 2, 3],所以互動器輸出 33。 最後啥龍得出對應輸出口 00 和輸出口 N1N-1 的取貨口是第 00 和 第 33 個取貨口(次序不限),! 0 3! 3 0 都是可接受的答案。

數據範圍與提示

對於所有輸入數據,滿足:

  • 3N300003 \leq N \leq 30000
  • 你最多可以發起 3030 次實驗,(輸出最終答案不計入實驗次數)。如果你超過這個限制,將得到判為 “Wrong Answer”。

詳細子任務附加限制及分值如下表所示。

子任務 分值 附加限制
11 99 N=3N=3
22 1515 N30N \leq 30
33 1717 取貨口 00 對應輸出口 00
44 1616 NN 是偶數,一個端點輸出口對應的取貨口在前半部分 (0A<N2)(0 \leq A < \frac{N}{2}),另一個端點輸出口對應的取貨口在後半部分 (N2B<N)( \frac{N}{2} \leq B < N)
55 1414 N1000N \leq 1000
66 2929 無附加限制