結果
| 問題 |
No.2804 Fixer And Ratism
|
| コンテスト | |
| ユーザー |
highlighter
|
| 提出日時 | 2024-07-04 15:43:57 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,222 bytes |
| コンパイル時間 | 3,432 ms |
| コンパイル使用メモリ | 269,032 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-07-11 23:11:09 |
| 合計ジャッジ時間 | 7,098 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | AC * 15 WA * 16 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
int main(){
set<pair<int,string>> data1;
set<pair<int,string>> data2;
int N,Q;
cin >> N >> Q;
int P=0;//部室にいる人数
for(;Q--;){
int c;
cin >> c;
assert(N+P>0);
if(c==1){
string s;
int r;
cin >> s >> r;
if(N==0){
cout << s << endl;
continue;
}
P++;
N--;
data2.insert(make_pair(r,s));
continue;
}
if(c==2){
int x;
cin >> x;
//x個使用不能に
//もともとN+P台
//N-x台とP人
//N-xが負ならP人の方にしわ寄せ
priority_queue<pair<int,string>,vector<pair<int,string>>,greater<pair<int,string>>> data3;
N-=x;
while(N<0){
P--;
N++;
if(!data2.empty()){
pair<int,string> p=*begin(data2);
data2.erase(p);
data3.push(p);
continue;
}
pair<int,string> p=*begin(data1);
data1.erase(p);
data3.push(p);
}
while(!data3.empty()){
cout << data3.top().second << endl;
data3.pop();
}
continue;
}
string s;
int x;
cin >> s >> x;
N+=x;
pair<int,string> q=make_pair(-1,"");
for(auto p : data2){
if(p.second==s){
q=p;
break;
}
}
if(q.first!=-1){
data2.erase(q);
data1.insert(q);
}
}
}
highlighter