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 的项链原题

莫队和树状数组都可以搞过去~~,当然直接粘代码是最爽的~~

代码就不贴了

你可能感兴趣的:(Atcoder ABC174 小结)