結果
| 問題 |
No.2804 Fixer And Ratism
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-07-05 10:53:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,367 bytes |
| コンパイル時間 | 2,764 ms |
| コンパイル使用メモリ | 223,200 KB |
| 最終ジャッジ日時 | 2025-02-22 02:12:19 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 5 WA * 26 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
bool isok(string &s){
for(auto c:s){
if('a' > c || 'z' < c) return false;
}
return true;
}
int main(){
int n, q;
cin >> n >> q;
assert(1 <= n && n <= 100);
assert(1 <= q && q <= 100000);
set<string> sv;
set<pair<int, string>> s1, s2;
map<string, int> rt;
while(q--){
int t;
cin >> t;
assert(1 <= t && t <= 3);
if(t == 1){
string s;
int r;
cin >> s >> r;
assert(isok(s));
assert(1 <= (int)s.size() && (int)s.size() <= 100);
assert(0 <= r && r <= 4000);
s2.insert({r, s});
rt[s] = r;
assert(!sv.count(s));
sv.insert(s);
}else if(t == 2){
int x;
cin >> x;
assert(1 <= x && x <= 10);
n -= x;
}else if(t == 3){
string s;
int x;
cin >> s >> x;
assert(isok(s));
assert(1 <= (int)s.size() && (int)s.size() <= 100);
assert(1 <= x && x <= 10);
n += x;
assert(rt.count(s));
int r = rt[s];
s2.erase({r, s});
s1.insert({r, s});
}
vector<string> ans;
while((int)s2.size() + (int)s1.size() > n){
if((int)s2.size() > 0){
auto [p, q] = *s2.begin();
s2.erase({p, q});
rt.erase(q);
ans.push_back(q);
}else{
auto [p, q] = *s1.begin();
s1.erase({p, q});
rt.erase(q);
ans.push_back(q);
}
}
sort(ans.begin(), ans.end());
for(auto s:ans) cout << s << '\n';
}
assert((int)sv.size() <= 100);
}