[閒聊] CodeChef Starters 77

看板Marginalman作者 (愛麗絲)時間3年前 (2023/02/16 04:22), 編輯推噓4(400)
留言4則, 4人參與, 3年前最新討論串1/1
這次是第二次參加 CodeChef Starters 我覺得還蠻有趣的 這次六題裡寫出了五題 排在 div2 的第二 這場比完就到六星 2302 似乎有些比較簡單比賽的就不能比了 https://i.imgur.com/6nOAwem.png
今天嘗試不用他那個慢的要死的線上IDE 改在本地寫+測試後再複製貼上 體驗整個就好很多 P1 CONCATPAL https://www.codechef.com/problems/CONCATPAL 因為可以隨便排順序 所以只需要看各個字母的出現次數 能成功若且唯若長的和短的抵消後 每個字母出現次數 >= 0 且出現次數是奇數的字母數 <= 1 (可以當中心點) P2 THREENUMBERS https://www.codechef.com/problems/THREENUMBERS 目標是要讓三個數都一樣 把兩個數加一且另一數減一 其實就等價於把一個數減二 答案就是與最小值的距離總和除二 P3 KPAL https://www.codechef.com/problems/KPAL 這題是 corner cases 題,分成 1. N = K (直接看 A 是不是回文) 2. N 是奇數 (一定成功) 3. N 是偶數,K 是奇數(一定成功) 4. N, K 都是偶數(看兩個半邊奇偶性是否一致) P4 SORTXOR https://www.codechef.com/problems/SORTXOR 從這題開始有挑戰一點 可以用三次 xor 交換兩個值 但如果只用到兩兩交換的話 會超出 3N/2 的限制(最多需要 3(N - 1) 次操作) 不過經過在紙上一陣亂試 會發現對於 permutation 的一個長度是 k 的 cycle 實際上只需要 k + 1 次操作 像是 (1 3 4) 這個 cycle 只需要作出 1: [1 3 4] 3: [1 3 4] 4: [1 3 4] 1: [1 3 4] 就可以直接排好位置 因為長度是 1 的 cycle 不用做事 所以最多就是 3/2 倍,剛好就是他的限制 記得把一開始的值轉成 ranking 形式的 permutation 即可 P5 SORTSTR https://www.codechef.com/problems/SORTSTR 這題我蠻喜歡的,因為題目簡潔但最後的結果又出乎我意料 對於一個字串,如果相鄰的兩個字元的值也是相鄰的就可以交換 例如 aabbd 中的 ab 交界可以互換,但 bd 交界不行 要找出能形成的字典序最小的字串 假如某個字元是 k 一個很重要的觀察是這個位置不可能 >= k + 2 也不能 <= k - 2 例如想要變成 k - 2,首先必須變成 k - 1 但 (k, k-1) 交換後變成 (k-1, k) 後 就又變成需要把後面的 k 變成 k-2 才能讓前面的 k-1 變小 所以不可能達成 要字典序最小,可以 greedy 的讓第一個最小 假如第一個字元是 k 根據剛才的觀察,我們只有機會讓他變 k-1 所以只有不斷的進 k 或是 k-2 才有機會一路交換上來變成 k-1 維護一個 queue 就會變成像下面這樣只由 k 及 k-2 組成 --------------- queue --------------> k k k (k-2) (k-2) (k-2) 這時如果進來 k-1,則可以一路交換到最前面 所以我把他稱作「隧道」 考慮完 k, k-1, k-2 的情形後來討論進其他值的情況 1. > k,則不管是 k 還是 k-2 都不可能再更小了,可以把整個 queue pop 掉 2. < k-4,則同樣不管是 k 或 k-2 都不可能更小 3. k-3 或 k-4,則所有的 k 都失敗,但 queue 結尾的連續 k-2 還保有機會 所以還要紀錄 queue 裡 k 的個數來讓我們知道 queue 裡是不是只剩 k-2 P6 KFOREST https://www.codechef.com/problems/KFOREST 這題我沒在比賽時寫出來,不過我方向大致正確就是了QQ 我有發現可以一個 bit 一個 bit 測試 有想到能分成 K 塊等價於能分成 K + 2i 塊 但我沒寫過把樹分成好幾塊的題目 我一直想從 leaf 開始往內縮 應該也會是對的但寫起來很複雜 看解答才知道其實用 dfs 就可以解了 這次的題目我還蠻喜歡的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.16.175 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1676492567.A.BCA.html

02/16 04:25, 3年前 , 1F
大師
02/16 04:25, 1F

02/16 04:44, 3年前 , 2F
大師
02/16 04:44, 2F

02/16 10:59, 3年前 , 3F
好電
02/16 10:59, 3F

02/16 11:17, 3年前 , 4F
大濕
02/16 11:17, 4F
文章代碼(AID): #1ZxJyNlA (Marginalman)