Submission #1303396

#TimeUsernameProblemLanguageResultExecution timeMemory
1303396Muhammad_AneeqBuilding Skyscrapers (CEOI19_skyscrapers)C++20
0 / 100
362 ms17476 KiB
#include <bits/stdc++.h> using namespace std; int const N=2e5+10; map<pair<int,int>,bool>scr; map<pair<int,int>,int>pre,ind; vector<int>req[N]={}; int cnt[N]={}; 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); } void ad(pair<int,int>g) { vector<pair<int,int>>z; 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={g.first+i,g.second+j}; if (scr.find(f)!=scr.end()) z.push_back(f); } } cout<<g.first<<' '<<g.second<<endl; for (auto i:z) { cnt[ind[i]]++; req[ind[g]].push_back(ind[i]); } } inline void solve() { int n,t; cin>>n>>t; int r[n],c[n]; 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[n-1],c[n-1]}; vector<int>ans; priority_queue<pair<int,pair<int,int>>>S; S.push({ind[cur],cur}); while (S.size()) { pair<int,pair<int,int>>ft; ft=S.top(); S.pop(); pair<int,int>g=ft.second; if (cnt[ind[g]]) continue; if (scr[g]==1) continue; scr[g]=1; ans.push_back(ft.first); for (auto i:req[ft.first]) cnt[i]--; 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.find(f)!=pre.end()&&!scr[f]&&!cnt[ind[f]]) { if (check(f.first,f.second)) ad(f); S.push({ind[f],f}); } } } } if (ans.size()!=n) { cout<<"NO\n";return; } reverse(begin(ans),end(ans)); 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...