結果

問題 No.2482 Sandglasses
ユーザー suisen
提出日時 2023-09-22 23:37:58
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 151 ms / 2,000 ms
コード長 1,213 bytes
コンパイル時間 770 ms
コンパイル使用メモリ 82,832 KB
最終ジャッジ日時 2025-02-17 01:10:29
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 25
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <algorithm>
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    int n, k, t;
    std::cin >> n >> k >> t;

    std::vector<int8_t> a(n);
    for (int i = 0; i < n; ++i) {
        char c;
        std::cin >> c;
        a[i] = (c == 'B');
    }
    std::vector<int> b(n);
    for (int &e : b) std::cin >> e;

    const int q = t / (2 * k), r = t % (2 * k);

    std::vector<int> c(n);
    for (int i = 0; i < n; ++i) {
        c[i] = b[i];
        int rt = r;
        bool state = a[i];
        while (rt) {
            int p = state ? k - c[i] : c[i];
            int d = std::min(rt, p);
            if (state) {
                c[i] += d;
            } else {
                c[i] -= d;
            }
            rt -= d;
            state = not state;
        }
    }
    std::sort(c.begin(), c.end());

    std::vector<int> p(n);
    std::iota(p.begin(), p.end(), 0);
    std::sort(p.begin(), p.end(), [&](int i, int j) { return b[i] < b[j]; });

    std::vector<int> ans(n);
    for (int i = 0; i < n; ++i) {
        ans[p[i]] = c[i];
    }

    for (int i = 0; i < n; ++i) {
        std::cout << ans[i];
        if (i + 1 != n) std::cout << ' ';
    }
    std::cout << '\n';
}
0