Submission #1302444

#TimeUsernameProblemLanguageResultExecution timeMemory
1302444g4yuhgTowers (NOI22_towers)C++20
22 / 100
304 ms62676 KiB
#include<bits/stdc++.h> typedef long long ll; #define pii pair<ll, ll> #define fi first #define se second #define endl '\n' #define TASK "" #define N 1000006 #define LOG 17 using namespace std; const ll inf = 1e9; bool ghuy4g; ll getbit(ll mask, ll i) { return (mask >> i) & 1; } ll onbit(ll mask, ll i) { return mask | (1 << i); } ll n; pii a[N]; ll max_x[N], min_x[N]; ll max_y[N], min_y[N]; ll cnt_x[N], cnt_y[N]; bool check(ll mask) { for (int i = 1; i <= n; i ++) { max_x[a[i].fi] = -inf; min_x[a[i].fi] = inf; max_y[a[i].se] = -inf; min_y[a[i].se] = inf; cnt_x[a[i].fi] = 0; cnt_y[a[i].se] = 0; if (cnt_x[a[i].fi] > 2 || cnt_y[a[i].se] > 2) return 0; } for (int i = 1; i <= n; i ++) { if (getbit(mask, i - 1) == 1) { max_x[a[i].fi] = max(max_x[a[i].fi], a[i].se); min_x[a[i].fi] = min(min_x[a[i].fi], a[i].se); max_y[a[i].se] = max(max_y[a[i].se], a[i].fi); min_y[a[i].se] = min(min_y[a[i].se], a[i].fi); cnt_x[a[i].fi] ++ ; cnt_y[a[i].se] ++ ; if (cnt_x[a[i].fi] > 2 || cnt_y[a[i].se] > 2) return 0; } } for (int i = 1; i <= n; i ++) { if (getbit(mask, i - 1) == 0) { if (min_x[a[i].fi] < a[i].se && a[i].se < max_x[a[i].fi]) { continue; } if (min_y[a[i].se] < a[i].fi && a[i].fi < max_y[a[i].se]) { continue; } return 0; } } return 1; } void sub1() { for (int mask = 0; mask < (1 << n); mask ++) { if (check(mask)) { for (int i = 0; i < n; i ++) { cout << getbit(mask, i); } return; } } } vector<ll> vty[N]; // cac vty[i]: a[id] co cung a[id].se == i bool cmp(ll u, ll v) { return a[u].fi < a[v].fi; } bool is[N]; void sub2() { ll mx = 0; for (int i = 1; i <= n; i ++) { vty[a[i].se].push_back(i); mx = max(mx, a[i].se); } for (int i = 1; i <= mx; i ++) { if (vty[i].size() == 0) continue; sort(vty[i].begin(), vty[i].end(), cmp); is[vty[i][0]] = 1; is[vty[i].back()] = 1; } for (int i = 1; i <= n; i ++) { cout << is[i]; } cout << endl; } bool klinh; signed main() { //freopen("slamp.inp", "r", stdin); //freopen("slamp.out", "w", stdout); //srand(time(0)); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i ++) { cin >> a[i].fi >> a[i].se; } if (n <= 16) { sub1(); } else { sub2(); } cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; cerr << fabs(&klinh - &ghuy4g) / 1048576.0; }
#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...