會注意到題目中的行走方向只有西、南以及換層幾種。題目本身很像是高中時會學到只能往右與往上,然後求走法的題目。
這裡將 定義為 的走法數量(從零開始,與實際數值差一)。
因為第 74 層不會被傳送到,這裡是將任何從 74 離開的都略過,你也可以選擇在第 74 層 continue 將它全部設為 0。
需要特別注意的是第 100 層,因為有提到一到達 100 層就結束,不應該在 100 層平面移動,這也是我沒有考慮到的地方,受到影響的同學不好意思。
此外還有一個很常見的錯誤,在題目中有詳細定義 是東西向, 是南北向,有許多人 與 相反。
本題需要找出 中的
可以明顯看出拆到最後就是將 質因數分解,但題目中約定使用的數字範圍為
故能將題目轉換為 , 為分解後剩下的數值
根據題意此時 必須要為 ,否則魔理沙無法詠唱
故後續只考慮
這時還剩下一個條件即最快的詠唱方式
觀察 、 、 ,可以知道在題目範圍內 應該要組合成 或 ,而組成 能夠更好的減少使用的文字數量,對於 同理
對於 來說由於範圍內沒有冪次,和其他數的乘積也會超出範圍,故只能維持原狀
最後會剩下 及 兩項
此時對於 來說可以兩個 組成 ,也可以和 組成
不過兩個組合方法都是將兩個長度一的組成一個長度一的,故兩種都可以
此時已經知道要盡量組成越多的 和 越好,而 和 兩者對於長度來說等價,所以實際解法也不需要質因數分解,只要從 開始除到 並記錄每個文字使用了幾次,除的過程中就已經包含分解和組合了
需要注意的是除完後要檢查 是否為
複雜度為
原本要求使用的文字盡量大,但題目未寫清楚,賽後改為Special Judge,只要長度最短就能AC
例如 ,照原題意應是 ,但 長度與其相同,所以兩者皆可
仔細觀察 AKA 這字串的構成
惠發現若是 K 左邊有 個 A 而右邊有 個 A,那麼圍繞此 K 的 AKA 就有 這麼多種
於是只需枚舉 K 出現的位置,並且利用對 A 數量的前綴和計算出 就有不錯的計算效率
要留意互乘的兩數可能很大,所以積要用較大的資料型態保存。
如同經典問題–- Add All ,詳細解法請自行搜尋,不在此多贅述。
我們將每個要接起來的地方視為「節點」,特別的是,我們將最頭與最尾也視為節點,因此共會有 個節點。
定義 為要將木棒連接為頭尾分別是 與 時,所需要花費的總代價, 為第 個節點的位置 (請注意 為 、 為 ),那麼轉移式為 ,要特別注意的是需要從長度為 的開始更新 值,再到長度 ,直到長度為 為止,最後 即為答案。
本題賽後新增測資,賽中的 submission 不影響
首先因為題目限制序列為非負整數,所以取越多肯定越好。
只要每次取 個,隔一格再取 個,直到整個數列被取完,可以得到一般式 。
只要 Greedy 的從大到小拿,一樣一次 個,因為捨棄較小的元素一定會比捨棄較大的元素來的好。
定義 為到第 個數字為止,最大的不含連續 個和是多少,那麼轉移式就會是 ,為了能快速查詢區間和,將輸入的陣列做一次前綴和,最終轉移式 。
令狀態 表示到第 個數以前且最尾端的連續和長度為 的最大子序列和
則 時,
且由於 2 維狀態要求空間過大,所以要利用滾動陣列壓縮掉 1 個維度。
直接的,每天將所有勇者都試試能打多少魔物,取最佳的結果,接著換下一天,依此類推
但粗估一下這樣的複雜度,為頗高的
不如觀察一下問題性質,以改進複雜度
很明顯的,一樣的耐力但不同的強度的勇者們,只會用到最強的那位勇者:
用
mx
陣列記錄同耐力中最大的強度
但測資也可以產生所有耐力都不一樣的勇者,這樣上述優化就無用了
再注意到,當出現這狀況,耐力高且強度高的勇者就是首選
也就是說若 則不需要用上第 位勇者:
於是就知道,當天能連續擊敗 個魔物的那位囂張的勇者該是哪位了
也就是設 表示某一天中勇者們能遇到的前 個魔物中最強的魔物強度
則如果 就表示有勇者能在這天連續擊敗 個魔物
初始 k
表示從第一天開始到當天目前共有 個魔物已死亡
所以這裡
a
陣列得從0
開始計
本題賽後新增測資,賽中的 submission 不影響
首先因為題目限制序列為非負整數,所以取越多肯定越好。
只要每次取 個,隔一格再取 個,直到整個數列被取完,可以得到一般式 。
只要 Greedy 的從大到小拿,一樣一次 個,因為捨棄較小的元素一定會比捨棄較大的元素來的好。
定義 為到第 個數字為止,最大的不含連續 個和是多少,那麼轉移式就會是 ,為了能快速查詢區間和,將輸入的陣列做一次前綴和,最終轉移式 。
然而這樣會吃一個 TLE ,我們觀察轉移式,發現 並不會被 的值影響,因此可以將 從 函數中提出來,轉移式變為 ,只要維護 即可,而你會發現 是一個滑動窗口,如此一來想到了一個問題–-滑動窗口最大值,因此可以用單調隊列來將轉移複雜度壓到均攤 ,如此一來總複雜度便是 。