ARC 149

A. Repdigit Number

https://atcoder.jp/contests/arc149/tasks/arc149_a

自力 AC

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

    ll N, M;
    cin >> N >> M;

    modint::set_mod(M);
    using mint = modint;

    auto chmin_string = [](string& a, string& b) -> void {
        if (a.size() > b.size()) return;
        if (a.size() < b.size()) {
            a = b;
            return;
        }
        if (a < b) a = b;
    };

    string ans = "";
    rep2(i, 1, 10) {
        string s = "";
        mint x = 0;
        rep(j, N) {
            x *= 10;
            x += i;
            s.push_back('0' + i);
            if (x == 0) chmin_string(ans, s);
        }
    }

    if (ans == "") ans = "-1";
    cout << ans << endl;
}

B. Two LIS Sum

https://atcoder.jp/contests/arc149/tasks/arc149_b

実験していて $A_i$ で sort して $B_i$ の LIS を求めるだけで良さそうだなと思って実装したら AC した。

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

    int n;
    cin >> n;
    vector<pair<int, int>> ps(n);
    rep(i, n) {
        int x;
        cin >> x;
        ps[i].first = x;
    }
    rep(i, n) {
        int x;
        cin >> x;
        ps[i].second = x;
    }

    sort(all(ps));

    ll ans = n;
    vint v(n + 1, INF);
    rep(i, n) {
        auto it = upper_bound(all(v), ps[i].second);
        *it = ps[i].second;
    }

    ans += lower_bound(all(v), INF) - v.begin();
    cout << ans << endl;
}

C. Avoid Prime Sum

https://atcoder.jp/contests/arc149/tasks/arc149_c

D. Simultaneous Sugoroku

https://atcoder.jp/contests/arc149/tasks/arc149_d

E. Sliding Window Sort

https://atcoder.jp/contests/arc149/tasks/arc149_e

F. Rational Number System

https://atcoder.jp/contests/arc149/tasks/arc149_f