Atcoder ABC174 小结
晚打了 20min,难受…… 而且 ATCoder 还是一如既往地卡……
D Alter Alter
考虑贪心。最后要求左边全是 R,右边全是 W。
手玩几个例子可以发现,显然我们要交换尽量靠左的 W 和靠右的 R。双指针上就是了。
感性理解的话…… 举个例子,如果交换的 R 并非最靠右,可能是无意义的,因为有可能交换最右边的 R 后,这个并非最靠右的 R 就没有必要交换了。举个例子:RWRRWRW,交换最靠右的 R 就变成了 RRRRWWW,一步到位;否则就是 RRRWWRW,显然不是最优。
代码:
int main() {
n = read();
scanf("%s", col + 1);
int l = 1, r = n, cnt = 0;
while(true) {
while(col[l] == 'R') ++l;
while(col[r] == 'W') --r;
if(l < r) ++cnt, ++l, --r;
else break;
}
cout << cnt << endl;
return 0;
}
E Logs
显然二分答案。二分后直接判断就完事了。
最恶心的是这道题 round up 指向上取整,谷歌生草机说是四舍五入坑了我好久……
代码:
LL n, k, a[Maxn], maxone;
LL calc(int len) {
if(!len) return 1e9 + 1;
LL tim = 0;
for(int i = 1; i <= n; ++i) {
tim += (a[i] - 1) / len;
}
return tim;
}
int main() {
n = read(); k = read();
for(int i = 1; i <= n; ++i) a[i] = read(), maxone = max(maxone, a[i]);
int l = 0, r = maxone;
while(l < r) {
int mid = (l + r) >> 1;
if(calc(mid) > k) l = mid + 1;
else r = mid;
}
cout << l << endl;
return 0;
}
F Range Set Query
惊不惊喜,意不意外,HH 的项链原题
莫队和树状数组都可以搞过去,当然直接粘代码是最爽的
代码就不贴了

浙公网安备 33010602011771号