共同卡片選擇

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\) 的公因數,輸出即視為通過。

Problem page help

Keyboard shortcuts

Main features

  • Sample tests — Runs the sample cases bundled with the problem and auto-compares against the expected output.
  • Custom test — Run your code with your own stdin. Optionally tick the "Compare with expected (diff)" box to verify against expected output line-by-line.
  • Template — Paste the default code template you set on your profile page.
  • Collab — Edit this problem together with classmates in real time.
  • Auto-draft — Editor contents auto-save to your browser every 1.5 seconds (per account / problem / language).
  • Submit — Send your code to the judge for grading; returns AC / WA / TLE etc.

Limits

  • Source code: at most 65,536 characters
  • Custom test stdin and expected output: at most 1 MB each (≈1 million characters)
  • Custom test and sample test share the sandbox; about 1 request per 3 s per user (sample test: 1 per 1 s)
  • Custom test and sample test both have a 15 second wall-clock cap (the official judge still uses the problem time limit)
  • Interactive problems do not offer custom test (cannot simulate interaction with the judge).
  • Submitting has no rate limit, but rapid repeated submissions on the same problem are treated as score farming.