Submission #346401

#TimeUsernameProblemLanguageResultExecution timeMemory
346401dooweyBuilding Skyscrapers (CEOI19_skyscrapers)C++14
54 / 100
359 ms22260 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;

#define fi first
#define se second
#define mp make_pair
#define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

const int N = 151111;
int dir[8][2] = {{-1,-1},{-1,0},{-1,+1},{0,-1},{0,+1},{1,-1},{1,0},{1,+1}};
map<pii,int> indx;

set<pii> unused;
set<pii> can;
vector<pii> ord;

void add_cell(pii xx){
    pii nx;
    for(int v = 0;v < 8 ; v ++ ){
        nx = mp(xx.fi+dir[v][0],xx.se+dir[v][1]);
        if(unused.count(nx)){
            unused.erase(nx);
            can.insert(nx);
        }
    }
}

int main(){
    fastIO;
    int n;
    cin >> n;
    int typ;
    cin >> typ;
    pii cc;
    pii root;
    for(int i = 1; i <= n; i ++ ){
        cin >> cc.fi >> cc.se;
        indx[cc]=i;
        if(i>1){
            unused.insert(cc);
        }
        else{
            root = cc;
        }
    }
    add_cell(root);
    ord.push_back(root);
    pii gg;
    while(!can.empty()){
        gg = *can.begin();
        can.erase(can.begin());
        ord.push_back(gg);
        add_cell(gg);
    }
    if(!unused.empty()){
        cout << "NO\n";
        return 0;
    }
    cout << "YES\n";
    for(auto x : ord){
        cout << indx[x] << " ";
    }
    cout << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...