Submission #1303000

#TimeUsernameProblemLanguageResultExecution timeMemory
1303000Muhammad_AneeqBuilding Skyscrapers (CEOI19_skyscrapers)C++20
8 / 100
315 ms16264 KiB
#include <bits/stdc++.h> using namespace std; map<pair<int,int>,bool>scr; bool check(int x,int y) { int ans=0; for (int i=-1;i<=1;i++) { for (int j=-1;j<=1;j++) { if (i!=0&&j!=0) continue; if (i==0&&j==0) continue; pair<int,int>f={x+i,y+j}; if (scr.find(f)==scr.end()) ans++; } } return (ans<=1); } inline void solve() { int n,t; cin>>n>>t; int r[n],c[n]; map<pair<int,int>,int>pre,ind; for (int i=0;i<n;i++) { cin>>r[i]>>c[i]; pre[{r[i],c[i]}]=1; ind[{r[i],c[i]}]=i+1; } pair<int,int>cur={r[0],c[0]}; vector<int>ans; set<pair<int,pair<int,int>>>S,pri; S.insert({ind[cur],cur}); while (S.size()||pri.size()) { pair<int,pair<int,int>>ft; if (pri.size()) { ft=*begin(pri); pri.erase(ft); } else { ft=*begin(S); S.erase(ft); } pair<int,int>g=ft.second; if (pre[g]==0) continue; pre[g]=0; scr[g]=1; ans.push_back(ft.first); for (int i=-1;i<=1;i++) { for (int j=-1;j<=1;j++) { pair<int,int>f={g.first+i,g.second+j}; if (pre[f]) { if (check(f.first,f.second)) pri.insert({ind[f],f}); else S.insert({ind[f],f}); } } } } if (ans.size()!=n) { cout<<"NO\n";return; } cout<<"YES\n"; for (auto i:ans) cout<<i<<'\n'; } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }
#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...