結果
| 問題 |
No.2596 Christmas Eve (Heuristic ver.)
|
| コンテスト | |
| ユーザー |
FplusFplusF
|
| 提出日時 | 2023-12-24 13:27:33 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,071 bytes |
| コンパイル時間 | 3,175 ms |
| コンパイル使用メモリ | 261,460 KB |
| 実行使用メモリ | 6,676 KB |
| スコア | 0 |
| 最終ジャッジ日時 | 2023-12-24 13:27:50 |
| 合計ジャッジ時間 | 15,055 ms |
|
ジャッジサーバーID (参考情報) |
judge14 / judge13 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 125 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
using tii=tuple<int,int,int>;
using qii=tuple<int,int,int,int>;
using ll=long long;
using ld=long double;
const int INF=1e9;
#define rep(i,n) for (int i=0;i<(int)(n);i++)
#define all(v) v.begin(),v.end()
template<class T> void chmin(T &a,T b){
if(a>b){
a=b;
}
}
template<class T> void chmax(T &a,T b){
if(a<b){
a=b;
}
}
struct tree{
int w,h;
};
int N,K;
vector<tree> front,center,back;
struct Solver{
void solve(){
set<pii> st_back,st_center;
rep(i,N) st_back.insert({back[i].w,i});
rep(i,2*N) st_center.insert({center[i].w,i});
vector<vector<int>> ans(K,vector<int>(4,-1)); //back->front->center1->center2
int cnt_tree=0;
rep(i,N){
rep(j,2*N){
if(center[i].w<=front[i].w) continue;
if(st_center.find({center[j].w,j})==st_center.end()) continue;
auto itr_back=st_back.lower_bound({front[i].w,-INF});
if(itr_back==st_back.begin()) continue;
itr_back--;
auto itr_center=st_center.upper_bound({center[j].w,INF});
if(itr_center==st_center.end()) continue;
ans[cnt_tree]={(*itr_back).second,i,j,(*itr_center).second};
st_back.erase(itr_back);
st_center.erase(itr_center);
st_center.erase({center[j].w,j});
cnt_tree++;
if(cnt_tree==K) break;
}
if(cnt_tree==K) break;
}
rep(i,K) cout << ans[i][1]+1 << ' ' << ans[i][2]+1 << ' ' << ans[i][3]+1 << ' ' << ans[i][0]+1 << '\n';
}
}Solver;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> K;
front.resize(N);
rep(i,N) cin >> front[i].w;
rep(i,N) cin >> front[i].h;
center.resize(2*N);
rep(i,2*N) cin >> center[i].w;
rep(i,2*N) cin >> center[i].h;
back.resize(N);
rep(i,N) cin >> back[i].w;
rep(i,N) cin >> back[i].h;
Solver.solve();
}
FplusFplusF