AtCoder 早稲田大学プログラミングコンテスト2019

1問だけ解いて早々に撤退。異次元だった。

https://atcoder.jp/contests/wupc2019

A

類題は https://atcoder.jp/contests/abc120/tasks/abc120_c とか https://atcoder.jp/contests/agc005/tasks/agc005_a

クソコード書いて提出。もっといいやり方ある気がしてならない。

signed main() {
    stack<char> st;
    string s;
    cin >> s;
    for (auto c : s) {
        if (st.empty()) {
            st.push(c);
        } else {
            if (st.top() == 'W' && c == 'A') {
                int cnt = 0;
                while (!st.empty() && st.top() == 'W') {
                    st.pop();
                    cnt++;
                }
                st.push('A');
                for (int i = 0; i < cnt; i++) {
                    st.push('C');
                }
            } else {
                st.push(c);
            }
        }
    }
 
    string ans;
    while (!st.empty()) {
        char c = st.top();
        st.pop();
        ans += c;
    }
    reverse(ans.begin(), ans.end());
    cout << ans << endl;
}

B

選択した部分集合における最大値が9なら操作回数が+3、8なら+2、6か7なら+1で5未満の数値にできる。あとはそいつらを5と一緒のグループにしてやってカウントが+1。最初から0か5しかなければ操作なしで終了。ここまではいい。たぶん。 問題は部分集合の選び方に制約があることだが、この制約がさっぱりわからん。なんかこの感じ既視感があると思ったら、こいつだ。

https://atcoder.jp/contests/aising2019/tasks/aising2019_c

復習が身についてへんやないか。

所感

日本には頭の良い人達が大量にいることがよく分かる時間だった。なーにが人手不足だ化け物揃いやぞ。