--- tags: Editorial --- # 108 北一區資訊學科能力競賽 + 題解 > 比賽時間:2019/11/13(三) > 參賽人數:29 位 > 晉級人數:2 位 > 評分標準:CMS,同分以執行時間比較 [TOC] ## 上午場 09:00 ~ 12:00 ### pA. 電話民調計票 **題目敘述** $N$ 位候選人,$P$ 位投票者,每位民眾最多可以投給 $M$ 個人 有效的投票是一個長度為 $N$ 的字串,其中只包含最多 $M$ 個 `*`,其餘皆為 `0`。 請計算每位候選人的得票數並排序。 **數據範圍** - $N, M \le 100$ - $P \le 5\,000$ | 子題 | 分數 | 限制 | |:----:|:--------------------:|:----------------:| | $1$ | $5\ 組 \times 1\ 分$ | 投票必定合理 | | $2$ | $5\ 組 \times 2\ 分$ | 投票長度必定合理 | | $3$ | $5\ 組 \times 2\ 分$ | 無額外限制 | :::spoiler 題解 by SorahISA $\qquad$ 對每次投票,只要長度不同或是 $\texttt{'*'}$ 超過 $M$ 個就直接 break,就剩下 sort 了~只要自己寫一個 cmp 就好。 $\qquad$ [Code by SorahISA](https://pastebin.com/w3kMb8SS) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 對每次投票,只要長度不同或是 '*' 超過 M 個就直接 break<br/> 就剩下 sort 了~<br/> 自己寫一個 cmp 就好<br/> <a href="https://pastebin.com/w3kMb8SS">Code by SorahISA</a> </ol> </details> --> ### pB. 採草莓問題 **題目敘述** 輸入同 $\text{IOI 1994 D1T1. The Triangle}$ <a href = "http://olympiads.win.tue.nl/ioi/ioi94/contest/day1prb1/problem.html"> Link </a> 不過要走到從左上角走到右下角並輸出路徑,向東優先,一開始在左上角格子的左邊,最後走到右下角格子的右邊。 **數據範圍** - $N \le 100$ | 子題 | 分數 | 限制 | |:----:|:--------------------:|:----------------------------------:| | $1$ | $3\ 組 \times 1\ 分$ | $N \le 10$,且不存在兩條相同的路徑 | | $2$ | $4\ 組 \times 3\ 分$ | $10 < N \le 50$ | | $3$ | $2\ 組 \times 5\ 分$ | $50 < N \le 100$ | :::spoiler 題解 by SorahISA $\qquad$ 基本的 dp~ $\qquad$ 走到 $\texttt{map[i][j]}$ 的最大收益是 $\texttt{map[i-1][j]}$ 跟 $\texttt{map[i][j-1]}$ 的最大值加上 $\texttt{strawberry[i][j]}$,不過要列出路徑,所以就把所有地方的轉移來源都記下來。 $\qquad$ 如果遇到同時可以走兩個方向,就紀錄是從「上面」轉過來的,因為在回朔路徑走法時,一定會有頭尾的 $\texttt{E}$、$(N-1)$ 次向 $\texttt{E}$、$(N-1)$ 次向 $\texttt{S}$,所以後面多走一點向南的路,就代表前面可以走較多向東的路。 $\qquad$ [Code by SorahISA](https://pastebin.com/QmC1RgpY) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 基本的 dp~<br/> 走到 map[i][j] 的最大收益是 map[i-1][j] 跟 map[i][j-1] 的最大值加上 strawberry[i][j]<br/> 不過要列出路徑,所以就把所有地方的轉移都記下來<br/> 如果遇到同時可以走兩個方向,就紀錄是從「上面」轉過來的,因為在回朔路徑走法時,一定會有頭尾的 E、N-1 次向東、N-1 次向南<br/> 所以後面多走一點向南的路,就代表前面可以走較多向東的路。<br/> <a href="https://pastebin.com/QmC1RgpY">Code by SorahISA</a> </ol> </details> --> ### pC. 解碼問題 **題目敘述** 將密鑰的空白以及重複字元刪除,再將 `a~z` 中剩餘字元依序接在後面,接下來按照字母表將其加密。 輸入第一行是 $0$ 或 $1$,代表解密或加密。 第二行是密鑰,由小寫組成,可能有空格。 第三行是明文或密文,可帶有大小寫及空格,大小寫及空白按照原樣輸出。 **數據範圍** - $|S| \le 2\,000$ | 子題 | 分數 | 限制 | |:----:|:--------------------:|:----------:| | $1$ | $5\ 組 \times 5\ 分$ | 無額外限制 | :::spoiler 題解 by SorahISA $\qquad$ 用 set 去紀錄每個字元有沒有被選過,以此構建出字母對應表,剩下就是暴力ㄌ~如果遇到空白就直接輸出,遇到大寫就先轉小寫,加密 / 解密後再變回來。 $\qquad$ [Code by SorahISA](https://pastebin.com/AbegtQh1) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 用 set 去紀錄每個字元有沒有被選過,以此構建出字母對應表<br/> 剩下就是暴力ㄌ~如果遇到空白就直接輸出,遇到大寫就先轉小寫,加密 / 解密後再變回來。<br/> <a href="https://pastebin.com/AbegtQh1">Code by SorahISA</a> </ol> </details> --> ### pD. 戳戳樂問題 **題目敘述** 在 $N \times M$ 的棋盤上確認一組多皇后的解是否有問題。 對於所有有問題的點座標按照由左到右,由上到下輸出。 **數據範圍** - $N, M \le 500$ | 子題 | 分數 | 限制 | |:----:|:---------------------:|:-------------:| | $1$ | $1\ 組 \times 1\ 分$ | $N,M \le 5$ | | $2$ | $1\ 組 \times 2\ 分$ | $N,M \le 10$ | | $3$ | $1\ 組 \times 4\ 分$ | $N,M \le 20$ | | $4$ | $1\ 組 \times 8\ 分$ | $N,M \le 100$ | | $5$ | $1\ 組 \times 10\ 分$ | $N,M \le 500$ | :::spoiler 題解 by SorahISA $\qquad$ 如果暴力可以作到 $O(NM(N+M))$ 好像也可以過? $\qquad$ 不過教授說要壓執行時間,所以可以改成紀錄每個直行、橫列、$2 \times (N+M-1)$ 條對角線有幾個洞再判斷,這樣就是 $O(NM)$ 了耶! $\qquad$ [Code by SorahISA](https://pastebin.com/uZweTxEY) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 如果暴力可以作到 O(NM(N+M)) 好像也可以過?<br/> 不過教授說要壓執行時間,所以可以改成紀錄每個直行、橫列、2*(N+M-1) 條對角線有幾個洞再判斷,這樣就是 O(NM) 了耶!<br/> <a href="https://pastebin.com/uZweTxEY">Code by SorahISA</a> </ol> </details> --> ## 下午場 13:00 ~ 15:00 ### pE. 哆啦A夢的生日 **題目敘述** 已知 $2112/01/01$ 是星期五 $Q$ 次詢問 $2102/01/01$ 到 $2122/01/01$ 年之間的某一天是星期幾 輸入長這樣: ``` 2 2112/01/01 2112/02/29 ``` 輸出長這樣: ``` Friday Monday ``` **數據範圍** - $\text{TL: 2 seconds}$ - $Q \le 3\,000$ | 子題 | 分數 | 限制 | |:----:|:---------------------:|:--------------:| | $1$ | $1\ 組 \times 1\ 分$ | $Q \le 5$ | | $2$ | $1\ 組 \times 2\ 分$ | $Q \le 10$ | | $3$ | $1\ 組 \times 4\ 分$ | $Q \le 20$ | | $4$ | $1\ 組 \times 8\ 分$ | $Q \le 2\,000$ | | $5$ | $1\ 組 \times 10\ 分$ | $Q \le 3\,000$ | :::spoiler 題解 by SorahISA $\qquad$ 雖然這題直接暴力是 $\mathcal{O}(3000 \times 10 \times 365)$,大約是 $10^7$ 也可以過,不過既然要看時間,那就有必要得到 $\mathcal{O}(1)$ 的做法。 $\qquad$ 我的作法是直接手動建表,建每年的元旦是星期幾,之後再判斷有沒有閏年。 $\qquad$ [Code by SorahISA](https://pastebin.com/TiHQ4dyj) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 雖然這題直接暴力是 O(3000*10*365),大約是 10^7 也可以過<br/> 不過既然要看時間,那就有必要得到 O(1) 的做法<br/> 我的作法是直接手動建表,建每年的元旦是星期幾<br/> 之後再判斷有沒有閏年<br/> <a href="https://pastebin.com/TiHQ4dyj">Code by SorahISA</a> </ol> </details> --> ### pF. 塗色問題 **題目敘述** 敘述簡略請見諒 給 $N$,然後有 $N$ 層的 block,第 $i$ 層 $i$ 個,然後給每個 block 上色,不能重複(顏色編號 $1 \sim \frac{N(N+1)}{2}$)。 接下來給 $M$ 組衝突的顏色,衝突的顏色不能放在相鄰的格子,問你第一層的格子放什麼顏色會使方案數最少,還有此時的方案數。 如果有多個顏色,輸出編號最小的。 **數據範圍** - $\text{TL: 8 seconds}$ - $N \le 5$ - $0 \le M \le \frac{N(N+1)}{2}$ | 子題 | 分數 | 限制 | |:----:|:--------------------:|:---------------:| | $1$ | $1\ 組 \times 2\ 分$ | $N \le 2$ | | $2$ | $5\ 組 \times 3\ 分$ | $3 \le N \le 4$ | | $3$ | $2\ 組 \times 4\ 分$ | $N = 5$ | :::spoiler 題解 by SorahISA $\qquad$ 爆搜+剪枝 $\mathcal{O}\left(\left(\frac{N(N+1)}{2}-1\right)!\right)$ 可以過! $\qquad$ 用 `next_permutation` 則會 TLE 拿到 $17$ 分 $\qquad$ 我的寫法可以被特定測資卡掉,應該有更好的解法?歡迎提供想法~ $\qquad$ [Code by SorahISA](https://pastebin.com/RuHeJbe2) ::: <!-- <details> <summary>題解 by SorahISA</summary> <ol> 爆搜+剪枝O((N*(N+1)/2 - 1)!)可以過!<br/> 用next_permutation會TLE拿到17分<br/> 應該有更好的作法?歡迎提供想法<br/> <a href="https://pastebin.com/RuHeJbe2">Code by SorahISA</a> </ol> </details> --> ## Rankings | 學校<br>姓名 | pA | pB | pC | pD | 上午場 | pE | pF | 下午場 | 總分 | |:------------------:|:----:|:----:|:----:|:----:|:------:|:----:|:----:|:------:|:-----:| | 花蓮高中<br>范釗維 | $25$ | $25$ | $25$ | $25$ | $100$ | $25$ | $25$ | $50$ | $150$ | | 宜蘭高中<br>黃允謙 | $25$ | $25$ | $25$ | $25$ | $100$ | $25$ | $23$ | $48$ | $148$ | | 花蓮高中<br>吳庭安 | $25$ | $25$ | $25$ | $25$ | $100$ | $25$ | $17$ | $42$ | $142$ | | 花蓮高中<br>林奕廷 | $25$ | $25$ | $25$ | $25$ | $100$ | $25$ | $2$ | $27$ | $127$ | | 台東高中<br>王景誠 | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | | 慧燈高中<br>林劭軒 | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | $?$ | | 佳作 | $-$ | $-$ | $-$ | $-$ | $-$ | $-$ | $-$ | $-$ | $-$ | | 宜蘭高中<br>朱偉哲 | $25$ | $25$ | $25$ | $15$ | $90$ | $25$ | $2$ | $27$ | $117$ |