tutorial
apcs
解題筆記
聲明:筆者沒有參與考試,題解內容僅在 ZeroJudge 上測試過。
作法:枚舉 ,計算相對應的收益,對所有可能答案取最大值。值得注意的是,收益值可能是負的。
作法:暴力的模擬每一天。要好好處理移動的人數,反正寫肥一點也不會被卡。有一個小技巧是,用 1-base 的座標,並把周圍多出來的一圈設為 ,這樣就不用特判邊界了。
總之,好好處理轉移、最大最小值就好。
思路:看起來很像經典的 DP 題,但是多了一個方向可以走。既然上下還是單向的話就從上往下 DP 吧。對於一個點要考慮從左邊走來、從右邊走來、從上面走來三種狀況,其中上面走來會是已經做好的。那就從左右各做一次 DP 吧。
作法:令 為從左邊走進 的最大經驗值, 為從右邊走進 的最大經驗值,則轉移式:
然後好好實作即可。
備註:這題的轉移式是去偷看討論區才搞通的。我弱
思路:一個一個從左到右把數字加入某個東東,並記錄這個數字有沒有出現過。如果沒有,就紀錄「現在有多少數字比這個數字小」;出現過的話,查詢「現在總共有多少數字比這個數字小」減掉「剛才有多少數字比這個數字小」,就會是「這個數字出現兩次之間」的答案。不難想到可以用值域 BIT 維護。
不過官解似乎不是用 BIT 而是線段樹。
有一解是先把線段樹全部設成 ,然後查詢兩個最大數之間的區間和,把兩個最大數的位置在線段樹中設成 ,然後再往下做。
以上程式碼皆經編譯執行並通過 ZeroJudge 測試。有任何問題歡迎留言提問。
相隔一年之後去寫 APCS 的題目,和之前的感覺比起來簡單許多。自我感覺良好的覺得自己進步了。
寫了常數超肥的扣的,赫然發現感覺還不錯,只是沒有 #define FOR(i,n)
多重迴圈寫得很煩躁。
還有一些不同做法沒有想到,得更努力才行