提出 #16938261


ソースコード 拡げる

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <functional>
#include <utility>
using i64 = long long;

int main() {
    int n;
    std::cin >> n;

    std::vector<std::pair<int, int>> r(n + 1), s;
    std::vector<int> ca(n + 1), cb(n + 1);
    for (int i = 0; i < n; i++) {
        int a;
        std::cin >> a;
        ca[a]++;
        if (ca[a] == 1) r[a] = std::make_pair(i, i + 1);
        else r[a].second++;
    }
    for (int i = 0; i < n; i++) {
        int b;
        std::cin >> b;
        cb[b]++;
    }

    for (int i = 1; i <= n; i++) {
        const int t = ca[i] + cb[i];
        if (t > n) {
            std::cout << "No" << std::endl;
            return 0;
        }
        if (t) s.emplace_back(t, i);
    }

    std::sort(s.begin(), s.end(), std::greater<>());

    std::vector<int> ret(n);
    try {
        std::set<int> ss;
        for (int i = 0; i < n; i++) ss.insert(i);
        std::vector<int> ex;
        for (const auto [c, i] : s) {
            const int bb = cb[i];
            for (int j = r[i].first; j < r[i].second; j++) {
                auto it = ss.find(j);
                if (it != ss.end()) {
                    ex.push_back(*it);
                    ss.erase(it);
                }
            }
            for (int j = 0; j < bb; j++) {
                if (ss.empty()) throw 0;
                auto it = ss.begin();
                ret[*it] = i;
                ss.erase(*it);
            }
            for (const int j : ex) ss.insert(j);
            ex.clear();
        }
    } catch (...) {
        std::set<int> ss;
        for (int i = 0; i < n; i++) ss.insert(i);
        std::vector<int> ex;
        for (const auto [c, i] : s) {
            const int bb = cb[i];
            for (int j = r[i].first; j < r[i].second; j++) {
                auto it = ss.find(j);
                if (it != ss.end()) {
                    ex.push_back(*it);
                    ss.erase(it);
                }
            }
            for (int j = 0; j < bb; j++) {
                if (ss.empty()) throw 0;
                auto it = ss.rbegin();
                ret[*it] = i;
                ss.erase(*it);
            }
            for (const int j : ex) ss.insert(j);
            ex.clear();
        }
    }

    std::cout << "Yes\n";
    for (const int e : ret) std::cout << e << ' ';
    std::cout << std::endl;

    return 0;
}

提出情報

提出日時
問題 F - Contrast
ユーザ CharlotteL
言語 C++ (GCC 9.2.1)
得点 600
コード長 2497 Byte
結果 AC
実行時間 250 ms
メモリ 18084 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果 AC
AC × 50
セット名 テストケース
Sample
All case03, case04, case05, case06, case07, case08, case09, case10, case11, case12, case13, case14, case15, case16, case17, case18, case19, case20, case21, case22, case23, case24, case25, case26, case27, case28, case29, case30, case31, case32, case33, case34, case35, case36, case37, case38, case39, case40, case41, case42, case43, case44, case45, case46, case47, case48, case49, sample00, sample01, sample02
ケース名 結果 実行時間 メモリ
case03 AC 8 ms 3604 KiB
case04 AC 2 ms 3628 KiB
case05 AC 2 ms 3604 KiB
case06 AC 3 ms 3628 KiB
case07 AC 2 ms 3560 KiB
case08 AC 2 ms 3556 KiB
case09 AC 2 ms 3632 KiB
case10 AC 5 ms 3580 KiB
case11 AC 2 ms 3580 KiB
case12 AC 117 ms 16332 KiB
case13 AC 52 ms 6340 KiB
case14 AC 72 ms 6380 KiB
case15 AC 118 ms 16464 KiB
case16 AC 155 ms 17292 KiB
case17 AC 140 ms 16228 KiB
case18 AC 135 ms 16232 KiB
case19 AC 135 ms 16284 KiB
case20 AC 143 ms 16224 KiB
case21 AC 168 ms 16668 KiB
case22 AC 141 ms 16300 KiB
case23 AC 142 ms 16388 KiB
case24 AC 203 ms 16372 KiB
case25 AC 199 ms 16376 KiB
case26 AC 139 ms 16460 KiB
case27 AC 135 ms 16372 KiB
case28 AC 53 ms 6380 KiB
case29 AC 52 ms 6376 KiB
case30 AC 207 ms 16332 KiB
case31 AC 135 ms 16464 KiB
case32 AC 139 ms 16388 KiB
case33 AC 134 ms 16412 KiB
case34 AC 139 ms 16300 KiB
case35 AC 186 ms 18084 KiB
case36 AC 182 ms 16512 KiB
case37 AC 250 ms 16488 KiB
case38 AC 176 ms 16560 KiB
case39 AC 141 ms 16460 KiB
case40 AC 133 ms 16464 KiB
case41 AC 134 ms 16372 KiB
case42 AC 142 ms 16372 KiB
case43 AC 196 ms 16388 KiB
case44 AC 131 ms 16368 KiB
case45 AC 133 ms 16388 KiB
case46 AC 129 ms 12560 KiB
case47 AC 15 ms 4224 KiB
case48 AC 111 ms 10900 KiB
case49 AC 196 ms 16928 KiB
sample00 AC 8 ms 3480 KiB
sample01 AC 2 ms 3496 KiB
sample02 AC 2 ms 3420 KiB