結果
問題 | No.2770 Coupon Optimization |
ユーザー |
![]() |
提出日時 | 2024-05-31 21:54:57 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,672 ms / 3,000 ms |
コード長 | 1,046 bytes |
コンパイル時間 | 4,443 ms |
コンパイル使用メモリ | 258,120 KB |
最終ジャッジ日時 | 2025-02-21 17:48:30 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 16 |
ソースコード
#include <stdio.h>#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using mint = modint998244353;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf32 1000000001#define Inf64 1000000000000000001int main(){int N,M;cin>>N>>M;vector<int> a(N);rep(i,N)cin>>a[i];vector<int> cnt(100);rep(i,M){int b;cin>>b;cnt[b]++;}if(N>M)cnt[0] = N-M;if(N<M){rep(i,100){while(M!=N && cnt[i]>0){cnt[i]--;M--;}}}M = N;sort(a.begin(),a.end());vector<priority_queue<long long,vector<long long>,greater<long long>>> pq(100);rep(i,100){rep(j,cnt[i]){pq[i].push(0);}}long long sum = 0;long long toku = 0;rep(i,N){sum += a[i];toku += 99LL * a[i] / 100;pq[99].push(a[i]);for(int j=99;j>=1;j--){if(pq[j].size()>cnt[j]){long long t = pq[j].top();pq[j].pop();toku -= (long long)j * t / 100;toku += (long long)(j-1) * t / 100;pq[j-1].push(t);}}cout<<sum-toku<<endl;}return 0;}