建構一個有$2N$個點的無向簡單圖,其中頂點編號為$0$到$2N - 1$的整數,且圖中編號$i$和$j$的頂點之間有邊($i\neq j$)若且惟若$4N-i-j$是質數。我們稱這個圖為質數圖$G_N$。
在這題,你必須求出$G_N$上最小字典序的最大匹配(即是圖中包含最多邊的邊集,使得任兩條在集合中的邊皆沒有公共頂點)。
所謂「最小字典序的最大匹配」,定義如下:
若一個圖$G$邊集的子集$E$,滿足對於所有$e_1,e_2\in E$且$e_1\neq e_2$,$e_1,e_2$沒有公共頂點,則稱$E$是一個$G$上的匹配。
若$G$上的匹配$E$,滿足對於所有$G$上的匹配$E'$都有$|E'|\leq |E|$,則稱$E$是一個$G$上的最大匹配。
我們將一條邊記為$(a,b)$,代表這條邊的兩端點的編號分別是$a,b$,且$a<b$。
若兩條邊$x=(a,b), y=(c,d)$滿足$a<c$或$a=c \land b<d$,則定義$x<y$。
定義一個邊集$E$的排序$S(E)=(e_1,e_2,\cdots,e_k)$代表將$E$中所有邊由小到大排序後形成的序列。(即$e_1<e_2<\cdots<e_k$且$E=\{e_1,e_2,\cdots,e_k\}$)
定義邊集$E$的字典序比另一個邊集$F$小,若且唯若$S(E)$的字典序比$S(F)$的字典序小。
例如:當$N=4$時,$\{ (0, 3), (1, 2), (4, 5), (6, 7) \}$ 的字典序比 $\{ (0, 3), (1, 2), (4, 7), (5, 6) \}$小。
輸入只有一行,包含一個正整數$N$。
對於所有測資,$2\leq N\leq 2345678$。
令$X$代表最大匹配的大小(即選定邊集的大小)。
輸出$X$行,每行輸出兩個整數$(a,b)$,代表邊$(a,b)$在$G_N$上最小字典序的最大匹配。注意輸出時必須先將所有邊由小到大排序後輸出,且輸出時$a < b$(即編號小的頂點在前)。
注意到由於有字典序的限制,因此答案是唯一的。
注意本題輸出量極大。使用C++作答的同學,輸出換行時請使用'\n'
代替std::endl
,以避免執行時間超過限制。
Problem set by rsabcmoi
建國中學107學年度校隊選拔:複試pE
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~2 | $N \leq 10$ | 10 |
2 | 3~5 | $N \leq 1000$ | 30 |
3 | 6~9 | 無額外限制 | 60 |