結果
| 問題 |
No.200 カードファイト!
|
| コンテスト | |
| ユーザー |
koyumeishi
|
| 提出日時 | 2015-06-01 23:57:06 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,485 bytes |
| コンパイル時間 | 894 ms |
| コンパイル使用メモリ | 85,944 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-15 09:00:08 |
| 合計ジャッジ時間 | 1,923 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
#include <iostream>
#include <vector>
#include <cstdio>
#include <sstream>
#include <map>
#include <string>
#include <algorithm>
#include <queue>
#include <cmath>
#include <set>
using namespace std;
int main(){
int n;
cin >> n;
int x;
cin >> x;
vector<int> a(x);
for(int i=0; i<x; i++){cin>>a[i];}
sort(a.begin(), a.end());
int y;
cin >> y;
vector<int> b(y);
for(int i=0; i<y; i++){cin>>b[i];}
sort(b.begin(), b.end());
int ans = 0;
set<int> a_(a.begin(), a.end());
set<int> b_(b.begin(), b.end());
vector<int> a_cnt(200, 0);
vector<int> b_cnt(200, 0);
for(int i=0; i<x; i++) a_cnt[a[i]]++;
for(int i=0; i<y; i++) b_cnt[b[i]]++;
auto erase = [&](set<int>& s, vector<int>& cnt, set<int>::iterator itr){
cnt[*itr]--;
if(cnt[*itr] == 0){
s.erase(itr);
}
};
for(int i=0; i<n; i++){
bool update = false;
for(auto b_itr = --b_.end(); !update; b_itr--){
auto itr = a_.lower_bound(*b_itr + 1);
if(itr != a_.end()){
//cerr << *itr << " " << *b_itr << endl;
erase(a_, a_cnt, itr);
erase(b_, b_cnt, b_itr);
ans++;
update = true;
break;
}
if(b_itr == b_.begin()) break;
}
if(!update){
auto itr = a_.begin();
erase(a_, a_cnt, itr);
erase(b_, b_cnt, --(b_.end()));
}
if(a_.size() == 0){
for(int j=0; j<x; j++){
a_.insert(a[j]);
a_cnt[a[j]]++;
}
}
if(b_.size() == 0){
for(int j=0; j<y; j++){
b_.insert(b[j]);
b_cnt[b[j]]++;
}
}
}
cout << ans << endl;
return 0;
}
koyumeishi