Submission #564467

#TimeUsernameProblemLanguageResultExecution timeMemory
564467birthdaycakeBuilding Skyscrapers (CEOI19_skyscrapers)C++14
0 / 100
120 ms13852 KiB
#include<bits/stdc++.h> #define int long long #define endl '\n' #define mod 1000000007 #define boost ios_base::sync_with_stdio(false), cin.tie(NULL); using namespace std; int grid[2001][2001],vs[2001][2001],w[2001][2001]; int x[] = {-1,-1,-1,0,1,1,1,0}, y[] = {-1,0,1,1,1,0,-1,-1}; vector<pair<int,int>>p,nxt; vector<int>ans; int n; bool cmp(int* a, int *b){ return *a < *b; } bool check(){ vector<pair<int,int>>b; b.push_back({p[0].first,p[0].second}); set<pair<int,int>>c,d; for(int i = 0; i < n; i++){ d.insert({p[i].first,p[i].second}); } int j = 0; while(j < b.size()){ for(int k = 0; k < 8; k++){ int nx = b[j].first + x[k], ny = b[j].second + y[k]; if(d.count({nx,ny})){ d.erase({nx,ny}); b.push_back({nx,ny}); } } j++; } return d.empty(); } void dfs(int a, int b){ vs[a][b] = 1; if(grid[a][b]){ nxt.push_back({a,b}); ans.push_back(w[a][b]); return; } for(int k = 0; k < 8; k++){ int aa = a + x[k], bb = b + y[k]; if(aa < 0 || bb < 0 || aa >= n || bb >= n || !grid[aa][bb] || vs[aa][bb]) continue; dfs(aa,bb); } } signed main(){ boost; int t; cin >> n >> t; vector<int*>d; for(int i = 0; i < n; i++){ int x,y; cin >> x >> y; p.push_back({x,y}); d.push_back(&p[i].first); d.push_back(&p[i].second); } if(!check()){ cout << "NO"; return 0; } sort(d.begin(), d.end(),cmp); int cur = -1, prev = 0; for(auto s:d){ if(*s != prev) cur++; prev = *s; *s = cur; } for(int i = 0; i < n; i++){ grid[p[i].first][p[i].second] = 1; w[p[i].first][p[i].second] = i; } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(i == 0 || j == 0 || i == n - 1|| j == n - 1) { if(!vs[i][j]) dfs(i,j); } } } while(!nxt.empty()){ vector<pair<int,int>>nw = nxt; nxt.clear(); for(int i = 0; i < nw.size(); i++){ int a = nw[i].first, b = nw[i].second; for(int k = 0; k < 8; k++){ int aa = a + x[k], bb = b + y[k]; if(aa < 0 || bb < 0 || aa >= n || bb >= n || vs[aa][bb] || !grid[aa][bb]) continue; dfs(aa,bb); } } } cout << "YES" << endl; for(int i = 0; i < n; i++){ cout << ans[i] + 1 << endl; } return 0; }

Compilation message (stderr)

skyscrapers.cpp: In function 'bool check()':
skyscrapers.cpp:34:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |     while(j < b.size()){
      |           ~~^~~~~~~~~~
skyscrapers.cpp: In function 'int main()':
skyscrapers.cpp:101:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  101 |         for(int i = 0; i < nw.size(); i++){
      |                        ~~^~~~~~~~~~~
#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...