本題為互動題,限用 C++ 作答。你可以在這裡找到範例實作以及範例評分程式,詳細注意事項以及常見問題請參考 Hints。
踢歐埃國是這次國際資訊奧林匹克競賽(國際資訊奧林匹克是結合體育與資訊的國際盛會)的舉辦國。今天,最後一場比賽結束了,然而主辦方遇到了技術問題沒辦法即時公佈記分板。
這次國際賽總共有 $N$ 個人參加,選手編號為 $0$ 至 $N - 1$ 之間的相異整數。在選手之間,有一個非官方統計出來的排名,每個選手的名次也是 $0$ 至 $N - 1$ 之間的相異整數。身為踢歐埃國的專業記者,你想要搶先取得這個排名。
然而記者在這一天是無法直接與參賽者互動的,因此你決定要用一個較為隱密的方法猜測:你發現一份外界預測的名單收到的負評數量就會剛剛好是被低估名次的人數,正式的說,假設編號為 $i$ 的參賽者非官方排名是 $r_i$,而你這次對這位參賽者猜測的名次是 $g_i$,這位參賽者會給這篇預測文章一個負評當且僅當 $g_i > r_i$,每次你發布一篇預測名單,你就能在短時間內蒐集到總負評的數量,只不過你不能知道是誰給你負評。
儘管有這樣的方案繞過主辦方的通訊限制,你需要跟主辦方修理記分板的時間賽跑。考慮到時間以及參賽者的耐心,你估計你的猜測次數不能超過門檻 $Q$。請寫一個程式在 $Q$ 次猜測以內找到正確的非官方排名。
你的程式需要在一開始使用前置處理器引入 lib0058.h
,請注意在本地測試時你需要改為引入 reporter.h
,詳細請參考範例實作。
你需要完成以下的函式:
std::vector<int> get_ranking(int N);
get_ranking
只會被呼叫剛好 $1$ 次。N
為題目中的參數 $N$。你可以呼叫以下函式:
int get_downvote(std::vector<int> g);
g
必須為一個長度為 $N$ 的陣列,第 $i$ 項為你這次猜測第 $i$ 名的參賽者編號,即滿足 $g_j = i$ 的 $j$。get_downvote
不得被呼叫超過 $Q = \textbf{200\ 000}$ 次。如果任意一個條件沒有被滿足,你的程式會被判斷為 Wrong Answer 並且獲得 0 分,否則,你的程式將依照 Scoring 中的敘述評分。
{0, 1, 3, 2}
,一個被判斷為 Accepted 的範例互動狀況如下:
評測程式端 | 參賽者程式端 |
---|---|
呼叫 get_ranking(4) 。 | |
呼叫 get_downvote({0, 1, 2, 3}) | |
回傳 1 。 | |
呼叫 get_downvote({0, 1, 3, 2}) | |
回傳 0 。 | |
回傳 {0, 1, 3, 2} 。 |
在第一次查詢中,僅有編號為 $3$ 的參賽者會發出抱怨,因為他的實際排名為 $2$ 卻被猜測為 $3$。在第二次查詢中,所有人都在正確的排名上,所以沒有人會抱怨,因此回傳 $0$。
get_downvote
的次數為 $q$,你的得分 $S$ 由下列方式計算:
範例評分程式以下列方式輸入:
範例評分程式以下列方式輸出:
如果你的程式被判斷為 Accepted,範例評分程式會輸出 Accepted: q
,其中 q
為呼叫 get_downvote
的次數。
如果你的程式被判斷為 Wrong Answer,範例評分程式會輸出 Wrong Answer: MSG
,其中 MSG
以及其代表的意思為以下列表的其中一個:
invalid guess
:猜測的排名不合法,也就是說,g
的長度不是 $N$、g
當中有相同的參賽者編號或者 g
當中的參賽者編號超出 $0$ 至 $N - 1$ 的範圍。invalid answer
:回傳的排名不合法,也就是說,回傳的排名長度不是 $N$、回傳的排名當中有相同的參賽者編號或者回傳的排名當中的參賽者編號超出 $0$ 至 $N - 1$ 的範圍。too many queries
:猜測的次數超過限制。not correct
:回傳的排名不正確。如果有多個原因,範例評分程式只會輸出任何一個。
由於 Windows Defender 以及各種奇怪東西的限制,本題的範例編譯指令不提供 Windows 批次檔。編譯及測試教學請參考下列說明。
reporter
,請直接用命令列執行該檔案。-static
參數移除,其餘與 Linux 相同。#include "grader.cpp"
,並且以單一檔案的編譯執行方式測試,請注意這一行上傳時需要刪除,否則你會獲得一個 Compile Error。IOICamp 2024 Day6 pK
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0 | 範例測資 | 0 |
2 | 0~44 | 無額外限制 | 100 |