Submission #1302381

#TimeUsernameProblemLanguageResultExecution timeMemory
1302381minhquangn263Towers (NOI22_towers)C++20
16 / 100
261 ms24100 KiB
#include<bits/stdc++.h> #define ll long long #define se second #define fi first #define all(v) v.begin(), v.end() using namespace std; const int N = 1e5 + 1; const ll inf = 1e18; const ll mod = 1e9 + 7; #define taskname "SLAMP" void inp(){ if(fopen(taskname".inp", "r")){ freopen(taskname".inp", "r", stdin); freopen(taskname".out", "w", stdout); } } vector<pair<int, int>> v; vector<int> idr, idc; int n; int get_pos(int val, vector<int> &v){ return lower_bound(all(v), val) - v.begin(); } namespace sub12{ bool check(int mask){ vector<vector<int>> r(idr.size()), c(idc.size()); for(int i = 0; i < n; ++i){ if(((mask >> i) & 1) == 0) continue; int pr = get_pos(v[i].fi, idr); int pc = get_pos(v[i].se, idc); r[pr].push_back(v[i].se); if(r[pr].size() == 2){ if(r[pr][0] > r[pr][1]) swap(r[pr][0], r[pr][1]); } c[pc].push_back(v[i].fi); if(c[pc].size() == 2){ if(c[pc][0] > c[pc][1]) swap(c[pc][0], c[pc][1]); } if(r[pr].size() > 2 || c[pc].size() > 2) return false; } // cout << "r" << '\n'; // for(int i = 0; i < idr.size(); ++i){ // cout << idr[i] << ": "; // for(int it : r[i]) cout << it << ' '; // cout << '\n'; // } // cout << "c" << '\n'; // for(int i = 0; i < idc.size(); ++i){ // cout << idc[i] << ": "; // for(int it : c[i]) cout << it << ' '; // cout << '\n'; // } // // cout << '\n'; for(int i = 0; i < n; ++i){ if((mask >> i) & 1) continue; int pr = get_pos(v[i].fi, idr); int pc = get_pos(v[i].se, idc); if(r[pr].size() == 2){ if(r[pr][0] < v[i].se && r[pr][1] > v[i].se) continue; } if(c[pc].size() == 2){ if(c[pc][0] < v[i].fi && c[pc][1] > v[i].fi) continue; } return false; } return true; } void solve(){ for(int mask = 1; mask < (1 << n); ++mask){ if(check(mask)){ for(int i = 0; i < n; ++i) cout << ((mask >> i) & 1); return; } } } } namespace sub3{ int ans[N]; void solve(){ vector<vector<pair<int, int>>> c(idc.size()); for(int i = 0; i < n; ++i){ auto it = v[i]; int pc = get_pos(it.se, idc); c[pc].push_back({it.fi, i}); ans[i] = 1; } for(int i = 0; i < idc.size(); ++i){ sort(all(c[i])); for(int j = 1; j < c[i].size() - 1; ++j) ans[c[i][j].se] = 0; } for(int i = 0; i < n; ++i) cout << ans[i]; } } //namespace sub4{ // bool vis[N]; // void solve(){ // vector<vector<int>> r(idr.size()), c(idc.size()); // // bool ok = true; // while(ok){ // vector<vector<int>> r1(idr.size()), c1(idc.size()); // // ok = false; // for(int i = 1; i <= n; ++i){ // if(vis[i]) continue; // ok = true; // // int pr = get_pos(v[i].fi, idr); // int pc = get_pos(v[i].se, idc); // // r1[pr].push_back(v[i].se); // c1[pc].push_back(v[i].fi); // } // // for(int i = 1; i <= n; ++i){ // if(vis[i]) continue; // // int pr = get_pos(v[i].fi, idr); // int pc = get_pos(v[i].se, idc); // // if(r1[pr][0] == ) // } // } // } //} int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); inp(); cin >> n; v.resize(n); for(auto &it : v){ cin >> it.fi >> it.se; idr.push_back(it.fi); idc.push_back(it.se); } bool ok = (n % 2 == 0); sort(all(idr)); sort(all(idc)); idr.erase(unique(all(idr)), idr.end()); idc.erase(unique(all(idc)), idc.end()); if(n <= 20) sub12::solve(); else if(ok) sub3::solve(); return 0; }

Compilation message (stderr)

Main.cpp: In function 'void inp()':
Main.cpp:16:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:17:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   17 |         freopen(taskname".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...