結果
| 問題 | 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();
}
            
            
            
        