某社群平台上有 $n$ 個帳號,編號為 $1$ 到 $n$。系統會為每一對帳號建立一筆關係紀錄,並將其自動判定為兩種型別之一:「已連結」或「未連結」——這是資料寫入當下就決定的欄位值,並非使用者手動設定。
平台的風控系統執行著一條內部代號為 YTP 規則(You can't have This Pattern,意即「不准出現這種特徵」)的規則,用來防止資料異常:
資料表中不得存在 $k$ 個帳號,使得這 $k$ 個帳號兩兩之間的關係型別全部相同——無論是兩兩皆為「已連結」(會被判定為疑似機器人叢集),還是兩兩皆為「未連結」(會被判定為孤立群組異常),只要能湊齊 $k$ 個帳號、彼此關係型別一致,就會觸發 YTP 規則,導致整份資料被判定不合規、打回重寫。
身為這套系統的資料庫管理員,你的任務是:事先設計好每一對帳號之間的關係型別(已連結/未連結),讓整份資料表能通過 YTP 規則的檢查。若無論怎麼設計都必定會觸發此規則,請回報無解。
輸入只有一行,包含以空白分隔的兩個整數 $n$ 和 $k$,分別代表帳號的數量,以及觸發 YTP 規則所需的帳號個數。
如果無論怎麼設計都會觸發 YTP 規則,輸出一行 -1。
否則輸出 $n$ 行,每行 $n$ 個字元(0 或 1,字元之間沒有空白),代表一個 $n \times n$ 的矩陣 $A$,描述你設計的關係表:第 $i$ 行的第 $j$ 個字元 $A_{i,j}$ 是帳號 $i$ 與帳號 $j$ 之間的關係型別,1 代表「已連結」,0 代表「未連結」。這個矩陣必須滿足
0,即對每個 $i$ 都有 $A_{i,i} = 0$(帳號與自己之間沒有關係紀錄);能通過檢查的設計可能有很多種,輸出任何一種都算對。
4 3
0010 0001 1001 0110
7 4
0000111 0010010 0100101 0000011 1010010 1101100 1011000
對於範例測資 1,$n = 4$、$k = 3$。範例輸出把 $6$ 筆關係紀錄分成兩組:
1):${1,3}$、${3,4}$、${4,2}$0):${3,2}$、${2,1}$、${1,4}$其中任意挑出 $3$ 個帳號,其中一定至少有一對「已連結」、也至少有一對「未連結」,湊不出 $3$ 個兩兩型別相同的帳號。
注意矩陣必須對稱:例如 $A_{1,3}$ 和 $A_{3,1}$ 都是 1,這是因為帳號 $1$ 與帳號 $3$ 之間只有一筆關係紀錄。
對於範例測資 2,$n = 7$、$k = 4$。此時「已連結」的關係紀錄有 $10$ 筆:
$${1,5},\ {1,6},\ {1,7},\ {2,3},\ {2,6},\ {3,5},\ {3,7},\ {4,6},\ {4,7},\ {5,6}$$
其餘 $11$ 筆則是「未連結」。任意挑出 $4$ 個帳號,都不會出現兩兩型別完全相同的情形。
兩筆範例測資中,能通過檢查的設計都不只一種,其他任何滿足條件的矩陣同樣會被接受。
2026 YTP 國中組決賽 p6
| No. | Testdata Range | Constraints | Score |
|---|---|---|---|
| 1 | 0~1 | 範例測試資料 | 0 |
| 2 | 2~8 | $k \ge 4$ | 9 |
| 3 | 0~12 | 無額外限制 | 6 |