摘要:
B. 分治。每次分治一个区间的时候统计所有跨过左右区间的区间对答案的贡献。令一个区间的左右端点分别为 a, b。那么这个区间的答案为 max(m[a], m[b], f[a] + f[b])。其中 m[x] 为 x 到中点的最大子段和,f[x] 为 x 到中点的最大前缀和。使用两个指针向两边扫,每次 阅读全文
摘要:
C. 前缀和。 #include <bits/stdc++.h> using namespace std; #define maxn 300000 #define INF 10000000 char c[maxn]; int n, ans = INF, sumB[maxn], sumW[maxn]; 阅读全文
摘要:
C. 如果S不等于1e9的话,可以直接放上k个S,再把剩下的所有数都写成1e9。如果S等于1e9,那么可以把剩下所有的数都写成1; #include <bits/stdc++.h> using namespace std; #define MAXX 1000000000 int n, S, K; i 阅读全文
摘要:
C.Fair Elevator 每一站都必须要有人上车/下车,则如果把上车标记为1,下车标记为2,最后的合法序列一定是形如x个1,x个2这样的若干个段拼在一起的。所以我们暴力枚举分段点及段的长度判断是否有合法解。 #include <bits/stdc++.h> using namespace st 阅读全文