由於只有3行,因此只會會換行2次,假設$x, y$分別為這兩次的換行點
那麼答案為$s[1][x] +s[2][y] - s[2][x - 1] + s[3][n] - s[3][y - 1]$
其中,$s[i]$表示第$i$行的字首和
令$a[x] = s[1][x] - s[2][x - 1], b[y] = s[2][y] - s[3][y - 1]$
考慮列舉$x$,那麼問題轉化為詢問在一堆數中求乙個數$k$使得$v (= a[x] + s[3][n]) + k \;mod\;p$最大
分兩種情況考慮,第一種$v + k \in [v, mod - 1]$,那麼$k \in [0, mod - k - 1]$,並且$k$越大越好
第二種不如第一種好,但有可能不得不選,$v + k \in [1, v - 1]$,同樣時$k$越大越好
也就是說,需要一種支援插入,查詢前驅和最大值的資料結構,$set$就可以
注:倒敘列舉$x$,可以做到不刪除
複雜度$o(n \log n)$
#include #include#include
#include
#include
using
namespace
std;
extern inline char
gc()
inline
intread()
while(c >= '
0' && c <= '
9') p = p * 10 + c - '
0', c =gc();
return p *w;
}#define ll long long
#define ri register int
#define sid 200050
intn, ans, mod;
int s[4
][sid], a[sid], b[sid];
setex;
intmain()
printf(
"%d\n
", ans);
return0;
}
51nod 1624 取餘最長路
佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為對p取模後的值,這讓佳佳十分的不開心,因為她無法找到一條能使她得到最大娛樂值的路徑了!她發現這個問題實在是太困難了,...
51nod 1624 取餘最長路
原題鏈結 1624 取餘最長路 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為...
51 Nod1624 取餘最長路
1624 取餘最長路 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為對p取模後...