1. 程式人生 > >Codechef October Challenge 2018 遊記

Codechef October Challenge 2018 遊記

byte pri 上界 取模 之間 而且 糖果 排序。 -o

Codechef October Challenge 2018 遊記

CHSERVE - Chef and Serves

題目大意:

乒乓球比賽中,雙方每累計得兩分就會交換一次發球權。

不過,大廚和小廚用了另外一種規則:雙方每累計得 K 分才會交換發球權。比賽開始時,由大廚發球。

給定大廚和小廚的當前得分(分別記為 P1 和 P2),請求出接下來由誰發球。

思路:

\((P1+P2)\%K\)判斷奇偶性即可。

代碼鏈接

BITOBYT - Byte to Bit

題目大意:

在字節國裏有三類居民:

  • 比特:在比特出現 2 毫秒後,它會變成一個半字節;
  • 半字節:在半字節出現 8 毫秒後,它會變成一個字節;
  • 字節:在字節出現 16 毫秒後,它會變成兩個比特。

在第 0 毫秒時,字節國裏只有一個比特。大廚想知道第 N 毫秒之前(即介於第 N ? 1 和第 N 秒之間)字節國的人口。請求出 N 毫秒之前字節國的每類居民各有多少。
\(N\le10^4\)

思路:

按題意模擬即可。
代碼鏈接

MINDSUM - Minimize Digitsum

題目大意:

給定正整數 N 和 D。你可以進行下面兩種操作:

  • 令 N 加上 D;
  • 令 N 為 digitsum(N)。

其中,digitsum(x) 代表 x 的各位數之和。例如,digitsum(123) = 1 + 2 + 3 = 6,digitsum(100) =

1 + 0 + 0 = 1。

你可以以任意順序進行任意次操作。請求出 N 可以達成的最小值,以及達成該最小值所需的最少操作次數。

\(1\le N,D\le10^{10}\)

思路:

最小值可以通過\(N,D\)\(\operatorname{digitsum}\)來確定。而最少操作次數相當有限,BFS即可。

代碼鏈接

HMAPPY - Appy and Balloons

題目大意:

Appy 最喜歡氣球!她想要你連續 N 天(編號 1 ~ N)都送她氣球,第 i 天 Appy 想要 Ai 個氣球。不巧的是,你只有 M 個氣球。幸運的是,你可以用糖果代替氣球送給她。在第 i 天,你每少給 Appy 一個氣球,Appy 就會找你要 Bi 顆糖果。具體地,如果第 i 天你給了 Xi 個氣球,那麽你還需要給她 Ci = max(0, Ai ? Xi) · Bi 顆糖果。

你的目標是最小化一天之內給 Appy 的糖果數量,換言之,最小化 max(C1, . . . , CN )。

  • 1 ≤ N ≤ \(10^5\)
  • 0 ≤ M ≤ \(10^{18}\)
  • 0 ≤ Ai ≤ \(10^9\)
  • 0 ≤ Bi ≤ \(10^9\)

思路:

二分答案。二分上界取\(10^{18}\)

(講道理最大會達到10^{23}左右,但是不知道為什麽一直WA,最後改成\(10^{18}\)就過了。)

代碼鏈接

CCIRCLES - Chef and Circles

題目大意:

平面上有 N 個圓。我們稱圓 i 和 j (i ?= j) 形成一個好的二元組,當且僅當可以在圓 i 上選擇一點 P1,圓 j 上選擇一點 P2,使得 P1 和 P2 的歐氏距離恰好為 K。註意 P1 和 P2 可以不是整點。

你需要回答 Q 個詢問。每個詢問給定目標距離 K,你需要求出此時有多少好的二元組。請註意,可能有多個圓重合。

思路:

將所有圓對間最遠、近點對處理出來,排序。線性掃一遍,遇到近點對+1,遠點對-1。

代碼鏈接

SURCHESS - Chef and Surprise Chessboard

題目大意:

大廚喜歡下國際象棋,所以他買了一塊 N 行 M 列的新棋盤。
大廚認為行列數相等,且相鄰(即有公共邊)的格子顏色不同(也就是所謂的“棋盤格”)的棋盤才是正確的棋盤。不過,大廚新買的這塊棋盤未必是正確的。

一塊棋盤的子棋盤定義為原棋盤中以任意格子作為左上角,任意格子作為右下角的部分。原棋盤本身也是自己的子棋盤。

大廚可以改變一些格子的顏色,即從白變黑或者從黑變白。在完成改變之後,大廚想從原棋盤上切出面積最大的正確的子棋盤。

大廚還沒想好要改變幾個格子的顏色。於是,他有 Q 個詢問,第 i 個詢問中大廚最多改變 ci 個格子的顏色(也可以不改變)。請你告訴大廚,在每個詢問的限制下,能切出的面積最大的正確子棋盤的邊長。

  • 1 ≤ N, M ≤ 200
  • 1 ≤ Q ≤ \(10^5\)
  • 0 ≤ ci ≤ \(10^9\)

思路:

對於點\((i,j)\),若\(i+j\)為奇數則將該格子顏色翻轉,題目就變成了求最大同色矩陣。

動態規劃前綴和優化求出每個矩陣至少需要多少步能夠同色。然後求出翻轉\(i\)步能翻轉出多大的矩陣,最後對於每次詢問可\(\mathcal O(1)\)回答。

代碼鏈接

BBRICKS - Beautiful Bricks

題目大意:

大廚決定裝修自己的餐廳。顧客進入餐廳,需要走過一段筆直的走廊。走廊兩側貼了瓷磚,
每側有 N 塊。所有瓷磚大小相同,且兩塊瓷磚之間沒有縫隙。
不巧的是,所有瓷磚顏色相同,看著有些乏味。大廚想讓走廊變得五彩斑斕,為此他準備替
換恰好 K 塊瓷磚,而且任意兩塊替換的瓷磚都不能相鄰。
大廚現在要解決一個很復雜的問題:有多少種替換瓷磚的方案數?由於答案可能很大,請輸
出其對 \(10^9 + 7\) 取模的結果。

  • 1 ≤ T ≤ 5
  • 1 ≤ N ≤ \(10^9\)
  • 1 ≤ K ≤ 1, 000

思路:

OEIS得到答案為\(\mathrm A104698(n-1,k-1)\times2\)

對階乘分段打表即可。

代碼鏈接

Codechef October Challenge 2018 遊記