はまやんはまやんはまやん

hamayanhamayan's blog

情報検索 / Information Search Ritsumeikan University Competitive Programming Camp 2019 Day 3 A]

https://onlinejudge.u-aizu.ac.jp/services/room.html#RitsCamp19Day3/problems/A

解説

https://onlinejudge.u-aizu.ac.jp/services/review.html#RitsCamp19Day3/3419402

尺取法っぽくやっていこう。
順番に見ていって、一緒ならand,orどっちもにも入れて、そうじゃないならorにだけ入れる。

int N, M, A[201010], B[201010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N >> M;
    rep(i, 0, N) cin >> A[i];
    rep(i, 0, M) cin >> B[i];

    vector<int> ansand, ansor;
    int a = 0, b = 0;
    while (a < N and b < M) {
        if (A[a] == B[b]) {
            ansand.push_back(A[a]);
            ansor.push_back(A[a]);
            a++; b++;
        } else if (A[a] < B[b]) {
            ansor.push_back(A[a]);
            a++;
        } else {
            ansor.push_back(B[b]);
            b++;
        }
    }
    while (a < N) {
        ansor.push_back(A[a]);
        a++;
    }
    while (b < M) {
        ansor.push_back(B[b]);
        b++;
    }

    int A = ansand.size();
    int B = ansor.size();

    printf("%d %d\n", A, B);
    fore(i, ansand) printf("%d\n", i);
    fore(i, ansor) printf("%d\n", i);
}