共同卡片選擇
Points 100 2.0s 512M桌上有 \(N\) 張卡片,每張卡片上寫著一個正整數。Alice 先從中挑出一些卡片,接著 Bob 從剩下的卡片裡挑出一些。兩人都至少要挑一張,且 Alice 不能把卡片全部挑走。Alice 與 Bob 各自把自己卡片上的數字加總;若這兩個總和擁有大於 \(1\) 的公因數,他們就會獲得一袋糖果,否則沒有糖果。給定卡片內容,請判斷是否有辦法讓 Alice 與 Bob 拿到糖果,若有,請輸出一組合法的取法。
為了增加挑戰性,在某些情況下,Alice 與 Bob 完全看不到卡片上的數字。
因數與公因數的定義
整數 \(d\) 是整數 \(q\) 的因數,若 \(q\) 除以 \(d\) 沒有餘數。整數 \(z\) 是整數 \(x\) 與 \(y\) 的公因數,若 \(z\) 同時是 \(x\) 與 \(y\) 的因數。
輸入格式
- 第一行:一個整數 \(N\)(卡片數量)。
- 第二行:\(N\) 個以空白分隔的整數 \(c_1, c_2, \ldots, c_N\)(第 \(i\) 張卡片上的數字)。
對於最後一個子任務(特殊形式),第二行的所有 \(c_i\) 都會是 -1,表示卡片內容對你而言完全未知;此時題目保證存在一組合法的取法。
限制
- \(2 \le N \le 10^5\)
- 一般情形:\(1 \le c_i \le 10^{12}\)
- 特殊情形:\(c_i = -1\)(所有 \(i\)),代表你看不到卡片內容。
- 評測程式為非適應性(non-adaptive):在最後一個子任務中,卡片實際內容會在評測前就固定,不會因你的輸出而改變。
輸出格式
一般情形(前五個子任務):
- 如果存在合法的取法,輸出三行:
- 第一行:
YES - 第二行:兩個正整數 \(A\) 與 \(B\),分別表示 Alice 與 Bob 取走的卡片數,以一個空白分隔。
- 第三行:\(A\) 個以空白分隔的整數,為 Alice 取走的卡片編號(編號從 \(1\) 開始)。
- 第四行:\(B\) 個以空白分隔的整數,為 Bob 取走的卡片編號。
- 第一行:
- 如果不存在合法的取法,僅輸出一行
NO。 - 若有多組合法解,輸出任何一組都接受。
特殊情形(最後一個子任務):
由於你看不到卡片內容,可以提交至多 \(K \le 100\) 組猜測。輸出方式如下:
- 第一行:一個整數 \(K\)(\(1 \le K \le 100\))。
- 接下來 \(K\) 組「三行區塊」,每一組的格式同上面一般情形的第二、三、四行(即 \(A\) \(B\) / Alice 編號 / Bob 編號)。
- 所有出現於 \(K\) 組猜測中的卡片編號必須兩兩不重複——同一張卡片不可在多於一組猜測中被使用。
- 評測程式會檢查 \(K\) 組猜測中是否至少有一組讓 Alice 與 Bob 取得糖果;若有,視為通過。
- 注意:你不會在猜測之間收到任何回饋。
評分說明
本題共有 \(6\) 組子任務,總分為 \(100\) 分:
| 子任務 | 分數 | \(N\) 上限 | \(c_i\) 上限 | 額外限制 |
|---|---|---|---|---|
| \(1\) | \(13\) | \(3\) | \(100\) | 無 |
| \(2\) | \(7\) | \(10\) | \(100\) | 無 |
| \(3\) | \(7\) | \(10^5\) | \(2\) | 無 |
| \(4\) | \(13\) | \(10^5\) | \(10^5\) | 無 |
| \(5\) | \(13\) | \(10^5\) | \(10^{12}\) | 無 |
| \(6\) | \(47\) | \(N = 10^5\) | \(c_i = -1\) | 題目保證存在解 |
範例輸入 1
7
19 7 11 31 99 13 17
範例輸出 1
YES
3 3
2 3 7
4 6 1
範例解釋 1
Alice 取走第 \(2, 3, 7\) 張卡片,數字總和為 \(7 + 11 + 17 = 35\)。Bob 取走第 \(4, 6, 1\) 張卡片,數字總和為 \(31 + 13 + 19 = 63\)。\(\gcd(35, 63) = 7 > 1\),因此他們獲得糖果。輸出 YES 並列出取法。
範例輸入 2
3
3 11 17
範例輸出 2
NO
範例解釋 2
\(3, 11, 17\) 兩兩互質。在 \(N = 3\) 的限制下,Alice 必取 \(1\) 或 \(2\) 張,Bob 取剩餘的。任何拆法都得不到大於 \(1\) 的公因數,故輸出 NO。
範例輸入 3
6
-1 -1 -1 -1 -1 -1
(這是特殊情形:所有 \(c_i = -1\)。實際 \(N\) 在子任務 \(6\) 中固定為 \(10^5\),這裡縮小為 \(6\) 僅作示意。)
範例輸出 3
2
1 1
1
2
2 1
3 4
5
範例解釋 3
共輸出 \(K = 2\) 組猜測:
- 第 \(1\) 組:Alice 取 \(\{1\}\)、Bob 取 \(\{2\}\)。
- 第 \(2\) 組:Alice 取 \(\{3, 4\}\)、Bob 取 \(\{5\}\)。
兩組猜測使用的卡片編號 \(\{1, 2\}\) 與 \(\{3, 4, 5\}\) 互不重疊,符合要求。只要其中任一組讓 Alice 與 Bob 的總和擁有 \(> 1\) 的公因數,輸出即視為通過。
Log in to write and submit code.
Log in