QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 4096 MB Total points: 100 Difficulty: [show] Communication

#13651. 魔術戲法

統計

Alicia 和 Beatriz 正在為 IOI 才藝表演準備一個魔術。這個魔術的運作方式如下:

  • 一位志願者選擇一個長度為 $N$ 的排列 $P$,並在桌上放置 $N$ 張牌。這些牌的編號從 $0$ 到 $N - 1$,其中第 $i$ 張牌顯示的數值為 $P[i]$。
  • Alicia 進入房間,觀察這些牌,並選擇其中 $K$ 張牌將其翻面,隱藏它們的數值。
  • 接著 Beatriz 進入房間,看到牌目前的排列方式(包含哪些牌是翻面隱藏的),並神奇地推斷出所有 $K$ 張隱藏牌的數值!

你的任務是為 Alicia 和 Beatriz 設計並實作一個策略。魔術越令人印象深刻,你的分數就越高:目標是最大化 $K$,即 Beatriz 能正確揭示的隱藏牌數量。

實作細節

你必須實作第一個程序:

std::vector<int> Alicia(std::vector<int> P)
  • $P$:長度為 $N$ 的陣列,代表所選的排列。

此程序應回傳一個長度為 $N$ 的陣列 $Q$,代表 Alicia 執行的翻牌動作。對於每個索引 $i$ ($0 \le i \le N - 1$),陣列 $Q$ 中的數值必須設定如下:

  • 若 Alicia 將第 $i$ 張牌翻面,則 $Q[i] = -1$。
  • 否則,$Q[i] = P[i]$。

你必須實作第二個程序:

std::vector<int> Beatriz(std::vector<int> Q)
  • $Q$:由 Alicia 回傳的長度為 $N$ 的陣列。此陣列指定了 Beatriz 進入房間時牌的配置。

此程序應回傳一個長度為 $N$ 的陣列 $B$,代表原始排列 $P$,也就是說,對於每個 $i$ ($0 \le i \le N - 1$),必須滿足 $B[i] = P[i]$。

在每個測試案例中,這兩個程序會各被呼叫一次,流程如下:

  • 在程式的第一次執行期間:
    • 呼叫 Alicia 並傳入原始排列 $P$。
    • 對於 Alicia 回傳的陣列 $Q$:
      • 如果陣列不符合上述限制,你將收到 Output isn't correct 的判決。
      • 否則,陣列 $Q$ 會由評測系統儲存。
  • 在程式的第二次執行期間:
    • 呼叫 Beatriz 並傳入陣列 $Q$。

資料範圍

  • $N = 256$
  • 對於每個 $0 \le i < N$,都有 $1 \le P[i] \le N$。
  • $P$ 中的所有數值皆相異。

子任務

令 $M$ 為你的解決方案在所有測試案例中成功執行魔術時,$K$ 的最小值。

  • 如果 $M = 0$ 或你的解決方案在任何測試案例中無法正確還原排列 $P$,你將獲得 0 分。
  • 否則,你的得分為: $$\min(20 + 5 \cdot M, 100)$$

特別地,若 $M = 16$ 則可獲得滿分。

範例

考慮一個 $N = 6$ 且 $P = [2, 4, 3, 1, 5, 6]$ 的情境。程序 Alicia 的呼叫方式如下:

Alicia([2, 4, 3, 1, 5, 6])

假設 Alicia 使用以下策略:將所有滿足 $P[i] = i + 1$ 的牌 $i$ 翻面。在此情況下,該條件對 $i = 2, 4, 5$ 成立。因此,該程序回傳陣列 $[2, 4, -1, 1, -1, -1]$。

現在,程序 Beatriz 的呼叫方式如下:

Beatriz([2, 4, -1, 1, -1, -1])

了解 Alicia 的策略後,她找到並回傳了原始陣列 $P = [2, 4, 3, 1, 5, 6]$。

在此情況下,$K = 3$,因為有三張牌被翻面。然而,如果提交此策略,將會獲得 0 分,因為存在某些排列使得沒有任何索引 $i$ 滿足 $P[i] = i + 1$。

注意,此範例不滿足 $N = 256$ 的限制,因此不會在評測中使用。此任務的可下載附件包含一個 $N = 256$ 的範例輸入供評測器使用。在評估期間,子任務 0 會使用相同的排列 $P$。

範例評測器

輸入格式:

N
P[0] P[1] ... P[N-1]

輸出格式:

S
Q[0] Q[1] ... Q[S-1]
T
B[0] B[1] ... B[T-1]

這裡:

  • $S$ 是 Alicia 回傳的陣列 $Q$ 的長度。
  • $T$ 是 Beatriz 回傳的陣列 $B$ 的長度。

注意,雖然此任務的所有測試案例皆滿足 $N = 256$,但你可以使用任何 $N$ 值來測試範例評測器。

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
#982EditorialOpenNew Editorial for Problem #13651KiharaTouma2026-02-10 13:46:27View

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.