TopCoder

abcabcabc
有人要寫 p6 嗎 > <

User's AC Ratio

66.7% (4/6)

Submission's AC Ratio

13.6% (6/44)

Tags

Description

本題為 Two Steps 題,限用 C++ 作答。你可以在這裡找到範例實作以及範例評分程式,詳細注意事項以及常見問題請參考 Hints。

「不要再 GO 了!我不知道你們在說什麼!」最近,8e7 發現他身邊的人都在看 MyGO!!!!!,但是他沒看過,所以他一直看不懂大家傳的那些梗圖。什麼「那傢伙竟然敢無視燈」、「從來不覺得打歡樂團體賽開心過」、「為什麼要演奏線段樹」之類的,他毫無頭緒。反正,以下是他亂寫的題敘。

千早愛音認為,展現自我的方式應該要多元一點,所以她正在學習溝通的方式。有一天,她、波路特石、跟 8e7 在進行溝通練習。

首先,8e7 會先給愛音一個整數 $x$,其中 $0 \le x < 2 ^ {30} $ 。接下來,愛音會寫給波路特石一個由 GO 兩種字元組成的訊息。8e7 會攔截這個訊息,而因為 8e7 不喜歡 GO,因此他有可能會將訊息中的 GO 反轉變成 OG。具體來說,8e7 會做以下的操作至多 $k \le 3$ 次:

  • 選擇訊息中任意一個 GO 的子字串,並將他反轉成為 OG

接下來,波路特石會收到這個經過 8e7 修改的訊息,而他的目標就是要正確的解讀出 $x$ 的值。請幫助愛音和波路特石找到溝通的方法。

詳細細節與評分方式請見後續段落。

Implementation Details

本題請不要使用標準輸入輸出流,不過你仍然可以輸出除錯訊息至標準錯誤流(stderr)。

你的程式需要在一開始使用前置處理器引入 lib0927.h,詳細請參考範例實作。

你需要完成以下的三個函式,詳細執行流程請參考後面的內容:

void init();
  • 在一筆測試資料中,init 會被呼叫恰兩次。
  • 你可以在這裡進行一些初始化的流程。
std::string Anon(int x, int k);
  • 在一筆測試資料中,Anon 會被呼叫恰 $T$ 次。
  • 引數 $x$ 代表愛音在題目收到的數字。
  • 引數 $k$ 代表 8e7 至多會進行幾次交換操作。
  • 回傳值需為一個由 G, O 字元組成的字串,且字串長度不得超過 $120$。
int Baluteshih(std::string message, int k);
  • 在一筆測試資料中,Baluteshih 會被呼叫恰 $T$ 次。
  • 引數 message 是一個經過 Anon(x, k) 回傳的字串再經過 8e7 修改後的結果。
  • 引數 $k$ 代表 8e7 至多會進行幾次交換操作。
  • 回傳值需為一個介於 $0$ 到 $2^ {30} - 1$ 的整數,且需與 Anon(x, k) 傳入的 $x$ 相同。

如果任意一個條件沒有被滿足,你的程式會被判斷為 Wrong Answer 並且獲得 0 分,否則,你的程式將依照 Scoring 中的敘述評分。

評測系統會用以下執行的過程:

  • 執行參賽者的程式,先呼叫 init(),然後呼叫 $T$ 次 Anon(),每次呼叫的參數分別為 $x_1, x_2, \dots, x_T$,而對應的訊息為 $m_1, m_2, \dots, m_T$。
  • 對於每個 $m_i, 1 \le i \le T$,根據題目中的方式修改 $m_i$。
  • 重新執行參賽者的程式,先呼叫 init(),然後呼叫 $T$ 次 Baluteshih(),每次呼叫的參數為 $m_1, m_2, \dots, m_T$,而回傳的結果為 $y_1, y_2, \dots, y_T$。
  • 如果 $\forall 1 \le i \le T, x_i = y_i$,那麼答案正確。

Example

假設 $T = 2$,一個被判斷為 Accepted 的範例互動狀況如下:


評測程式端 參賽者程式端
系統第一次執行參賽者的程式。
呼叫 init()
呼叫 Anon(4, 3)
回傳 GOGO
呼叫 Anon(6, 3)
回傳 GOGOGO
系統將 GOGO 交換成 OOGG
系統將 GOGOGO 交換成 GOGOGO
系統第二次執行參賽者的程式。
呼叫 init()
呼叫 Baluteshih(OOGG, 3)
回傳 4
呼叫 Baluteshih(GOGOGO, 3)
回傳 6

Constraints

  • $1 \leq T \leq 10^ 5$
  • $0 \leq x < 2^ {30}$
  • $1 \leq k \leq 3$

Scoring

假設 $L$ 為該子題所有測資中,Anon 回傳的字串長度最大值。你的分數會是該子題的分數乘上倍數 $p$,其中

  • 如果 $L \leq 47$, $$p = 1$$
  • 如果 $47 < L \leq 60$, $$p = 0.75 + 0.02 \times (60 - L)$$
  • 如果 $60 < L \leq 120$, $$p = 0.15 + 0.01 \times (120 - L)$$
  • 否則, $$p = 0$$

Input Format

範例評分程式以下列方式輸入:

  • line $1$: $T$ $k$
  • line $2$: $x_1$ $x_2$ $\ldots$ $x_T$

其中 $x_i$ 為第 $i$ 次呼叫 Anon 的引數 $x$。

Output Format

範例評分程式以下列方式輸出:

如果你的程式被判斷為 Accepted,範例評分程式會輸出 Accepted: L,其中 LAnon 回傳的字串長度最大值。

如果你的程式被判斷為 Wrong Answer,範例評分程式會輸出 Wrong Answer: MSG,其中 MSG 以及其代表的意思為以下列表的其中一個:

  • Wrong charset: 回傳的字串包含 G, O 以外的字元。
  • Too long: 回傳的字串長度超過 $120$。
  • Not correct: 回傳的答案錯誤。

如果有多個原因,範例評分程式只會輸出任何一個。

請注意,範例評分程式的評測方法與實際評分程式不同,實際評測系統會用在 Implementation Details 欄位敘述的方法執行。

另外,範例評分程式會將交換的過程好好的輸出,請好好運用。

Sample Input 1

2 3
4 6

Sample Output 1


        

Hints

由於 Windows Defender 以及各種奇怪東西的限制,本題的範例編譯指令不提供 Windows 批次檔。編譯及測試教學請參考下列說明。

  • 如果你的系統是 Linux,你可以直接執行 compile.sh 編譯你的程式,編譯結果會是 nogo.exe,請直接用命令列執行該檔案。
  • 如果你的系統是 MacOS,你需要將 compile.sh 當中的 -static 參數移除,其餘與 Linux 相同。
  • 如果你的系統是 Windows,你有以下的選擇:
    1. 本地測試時加入 #include "grader.cpp",並且以單一檔案的編譯執行方式測試,請注意這一行上傳時需要刪除,否則你會獲得一個 Compile Error。
    2. 將 compile.sh 的變數替換後直接於命令列執行,請注意你需要確保 g++ 在系統的環境變數 PATH 中。
    3. 如果你的電腦已經有 WSL (Windows Subsystem for Linux),你可以直接使用 WSL 並按照 Linux 的做法。
    4. 使用電腦教室的 Ubuntu(啟動時可以選擇系統)並按照 Linux 的做法。

Problem Source

Subtasks

No. Testdata Range Constraints Score
1 0 範例測資 0
2 1~14 $k=1$ 25
3 0~31 無額外限制 75

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 6000 1048576 65536 1 3
1 6000 1048576 65536 2 3
2 6000 1048576 65536 2 3
3 6000 1048576 65536 2 3
4 6000 1048576 65536 2 3
5 6000 1048576 65536 2 3
6 6000 1048576 65536 2 3
7 6000 1048576 65536 2 3
8 6000 1048576 65536 2 3
9 6000 1048576 65536 2 3
10 6000 1048576 65536 2 3
11 6000 1048576 65536 2 3
12 6000 1048576 65536 2 3
13 6000 1048576 65536 2 3
14 6000 1048576 65536 2 3
15 6000 1048576 65536 3
16 6000 1048576 65536 3
17 6000 1048576 65536 3
18 6000 1048576 65536 3
19 6000 1048576 65536 3
20 6000 1048576 65536 3
21 6000 1048576 65536 3
22 6000 1048576 65536 3
23 6000 1048576 65536 3
24 6000 1048576 65536 3
25 6000 1048576 65536 3
26 6000 1048576 65536 3
27 6000 1048576 65536 3
28 6000 1048576 65536 3
29 6000 1048576 65536 3
30 6000 1048576 65536 3
31 6000 1048576 65536 3