結果

問題 No.2770 Coupon Optimization
コンテスト
ユーザー InTheBloom
提出日時 2026-04-10 14:35:31
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,019 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,806 ms
コンパイル使用メモリ 216,272 KB
実行使用メモリ 13,240 KB
最終ジャッジ日時 2026-04-10 14:35:40
合計ジャッジ時間 8,464 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 2 WA * 14
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <vector>
#include <algorithm>
#include <atcoder/convolution>

using namespace std;
using namespace atcoder;

using ll = long long;

int main () {
    int N, M;
    cin >> N >> M;
    vector<ll> A(N), B(M);
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }
    for (int i = 0; i < M; i++) {
        cin >> B[i];
    }

    // k固定のとき -> タコ焼き機昇順k個を購入で、クーポンは割合の高いものを高額なものに割り当てる貪欲
    // k固定でない -> 昇順k個とクーポン降順k個の各点積の和がたくさん欲しい -> convolution

    for (int i = 0; i < N; i++) {
        A[i] /= 100;
    }
    vector<ll> C(max(N, M), 0);
    for (int i = 0; i < max(N, M); i++) {
        if (i < M) {
            C[i] = B[i];
        }
        C[i] = 100 - C[i];
    }
    sort(A.begin(), A.end());
    sort(C.begin(), C.end());

    auto ret = convolution(A, C);

    for (int i = 0; i < N; i++) {
        cout << ret[i] << "\n";
    }
}
0