Submission #831544

#TimeUsernameProblemLanguageResultExecution timeMemory
831544andrey27_smFountain Parks (IOI21_parks)C++17
15 / 100
123 ms23208 KiB
#include "parks.h" #include <bits/stdc++.h> using namespace std; vector<pair<int,int>> cons[200001]; int mask_l[200001]; vector<int> u; vector<int> v; vector<int> a; vector<int> b; int construct_roads(vector<int> x, vector<int> y) { int n = x.size(); int l = 1e9; int r = 0; for (int i = 0; i < n; ++i) { cons[y[i]/2].push_back({x[i],i}); mask_l[y[i]/2]|=(1<<(x[i]/2-1)); } for (int i = 0; i <= 100000; ++i) { if(mask_l[i]){ l = min(l,i); r = max(r,i); sort(cons[i].begin(), cons[i].end()); } } for (int i = l; i <= r; ++i) { if(i != l and (mask_l[i]&mask_l[i-1]) == 0) return 0; } int p = l+1; bool con = 1; if(mask_l[l] != 5) { for(int i = 0;i+1 < cons[l].size();i++){ u.push_back(cons[l][i].second); v.push_back(cons[l][i+1].second); a.push_back(cons[l][i].first+1); b.push_back(2*l-1); } } else{ con = 0; } while(p <= r){ if(mask_l[p] == 5 and (mask_l[p-1]&mask_l[p]) != 5) con = 0; if(con == 0){ if(mask_l[p] == 5){ for(auto e:cons[p-1]){ if(e.first == 2){ u.push_back(e.second); v.push_back(cons[p][0].second); a.push_back(e.first-1); b.push_back(2*p-1); } if(e.first == 6){ u.push_back(e.second); v.push_back(cons[p][1].second); a.push_back(e.first+1); b.push_back(2*p-1); } } } else if(mask_l[p] == 7){ for(auto e:cons[p-1]){ if(e.first == 2){ u.push_back(e.second); v.push_back(cons[p][0].second); a.push_back(e.first-1); b.push_back(2*p-1); } if(e.first == 6){ u.push_back(e.second); v.push_back(cons[p][1].second); a.push_back(e.first+1); b.push_back(2*p-1); } } u.push_back(cons[p][0].second); v.push_back(cons[p][1].second); a.push_back(cons[p][1].first-1); b.push_back(2*p-1); u.push_back(cons[p][1].second); v.push_back(cons[p][2].second); a.push_back(cons[p][2].first-1); b.push_back(2*p-1); con = 1; } else return 0; } else if(mask_l[p] == 7 and mask_l[p-1] == 2){ u.push_back(cons[p][0].second); v.push_back(cons[p][1].second); a.push_back(cons[p][1].first-1); b.push_back(2*p-1); u.push_back(cons[p][1].second); v.push_back(cons[p][2].second); a.push_back(cons[p][2].first-1); b.push_back(2*p+1); u.push_back(cons[p-1][0].second); v.push_back(cons[p][1].second); a.push_back(cons[p][1].first+1); b.push_back(2*p-1); } else if(mask_l[p-1] == 7){ for(auto e:cons[p]){ if(e.first == 2 or e.first == 4){ u.push_back(e.second); v.push_back(cons[p-1][e.first/2-1].second); a.push_back(e.first-1); b.push_back(2*p-1); } else{ u.push_back(e.second); v.push_back(cons[p-1][e.first/2-1].second); a.push_back(e.first+1); b.push_back(2*p-1); } } } else{ int mask_blocked = 0; if((mask_l[p]&3) == 3 and (mask_l[p-1]&3) != 3){ u.push_back(cons[p][0].second); v.push_back(cons[p][1].second); a.push_back(cons[p][1].first-1); b.push_back(2*p-1); mask_blocked|=1; } if(((mask_l[p]>>1)&3) == 3 and ((mask_l[p-1]>>1)&3) != 3){ u.push_back(cons[p][0+(mask_l[p]&1)].second); v.push_back(cons[p][1+(mask_l[p]&1)].second); a.push_back(cons[p][1+(mask_l[p]&1)].first-1); b.push_back(2*p-1); mask_blocked|=2; } for(auto e:cons[p]){ for(auto E:cons[p-1]){ if(e.first != E.first) continue; //cout << e.second << " " << E.second << "--\n"; u.push_back(e.second); v.push_back(E.second); b.push_back(2*p-1); if(e.first == 2) a.push_back(1); else if(e.first == 6) a.push_back(7); else if(mask_blocked&1){ a.push_back(5); } else{ a.push_back(3); } } } } p++; } if(con == 0) return 0; build(u,v,a,b); return 1; }

Compilation message (stderr)

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:35:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   for(int i = 0;i+1 < cons[l].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...