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
復習が身についてへんやないか。
所感
日本には頭の良い人達が大量にいることがよく分かる時間だった。なーにが人手不足だ化け物揃いやぞ。