AGC 058

https://atcoder.jp/contests/abc058

A. Make it Zigzag

https://atcoder.jp/contests/agc058/tasks/agc058_a

0-index で考える。 $i \equiv 0 \mod 2$ のときに、$P_i$, $P_{i+1}$, $P_{i+2}$ の大小関係は以下の4通りにに分けられる。

Type A のとき、 $\mathrm{swap}(P_{i+1}, P_{i+2})$ を行うことで $P_i < P_{i+1} > P_{i+2}$ を実現できる

Type B のとき、 $\mathrm{swap}(P_i, P_{i+1})$ を行うことで $P_i < P_{i+1} > P_{i+2}$ を実現できる

Type C のとき、 $P_i > P_{i+2}$ ならば $\mathrm{swap}(P_i, P_{i+1})$ を行い、$P_i < P_{i+2}$ なら $\mathrm{swap}(P_{i+1}, P_{i+2})$ をすることで $P_i < P_{i+1} > P_{i+2}$ を実現できる

Type D のときは何もする必要ない

$i = 2N-1$ のときは、$P_{i} > P{i+1}$ ならば $\mathrm{swap}(P_i, P_{i+1})$ を行う.

$i \equiv 0 \mod 2$ のときに上記の操作をしていれば $i \equiv 1 \mod 2$ のときは操作を必要はない。 よって、$N$ 回以下の操作で条件を満たすことができる。

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    cin >> N;
    vint P(N * 2);
    rep(i, N * 2) cin >> P[i];

    vint ans;
    for (int i = 0; i < N * 2 - 1; i += 2) {
        if (i == N * 2 - 2) {
            if (P[i] > P[i + 1]) {
                swap(P[i], P[i + 1]);
                ans.push_back(i);
            }
        } else {
            if (P[i] < P[i + 1] && P[i + 1] < P[i + 2]) {
                swap(P[i + 1], P[i + 2]);
                ans.push_back(i + 1);
            } else if (P[i] > P[i + 1] && P[i + 1] > P[i + 2]) {
                swap(P[i], P[i + 1]);
                ans.push_back(i);
            } else if (P[i] > P[i + 1] && P[i + 1] < P[i + 2]) {
                if (P[i] > P[i + 2]) {
                    swap(P[i], P[i + 1]);
                    ans.push_back(i);
                } else {
                    swap(P[i + 1], P[i + 2]);
                    ans.push_back(i + 1);
                }
            }
        }
    }
    for (int& x : ans)
        x++;
    cout << ans.size() << endl;
    print(ans);
}

B. Adjacent Chmax

https://atcoder.jp/contests/agc058/tasks/agc058_b

C. Planar Tree

https://atcoder.jp/contests/agc058/tasks/agc058_c

D. Yet Another ABC String

https://atcoder.jp/contests/agc058/tasks/agc058_d

E. Nearer Permutation

https://atcoder.jp/contests/agc058/tasks/agc058_e

F. Authentic Tree DP

https://atcoder.jp/contests/agc058/tasks/agc058_f