Submission #1302360

#TimeUsernameProblemLanguageResultExecution timeMemory
1302360khoavn2008Towers (NOI22_towers)C++17
16 / 100
173 ms40312 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld double
#define FOR(i,l,r) for(int i = (l), _r = (r); i <= _r; i++)
#define FORNG(i,r,l) for(int i = (r), _l= (l); i >= _l; i--)
#define REP(i,n) for(int i = 0, _n = (n); i < _n; i++)
#define endl '\n'
#define fi first
#define se second
#define size(v) ((int)(v).size())
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define MASK(x) (1LL << (x))
#define BIT(x, i) (((x) >> (i)) & 1)

const ll MOD = 1e9 + 7, N = 1e6 + 10, LOG = 19;
const int INF = 1e9 + 36;
int n;
pair<int,int> P[N];
namespace sub12{
    void solve(){
        REP(mask,MASK(n)){
            if(!mask)continue;
            bool ok = 1;
            REP(i,n){
                if(!BIT(mask,i)){
                    int l = INF, r = -INF;
                    int u = INF, v = -INF;
                    REP(j,n)if(BIT(mask, j)){
                        if(P[j].se == P[i].se)l = min(l, P[j].fi),r = max(r, P[j].fi);
                        if(P[j].fi == P[i].fi)u = min(u, P[j].se),v = max(v, P[j].se);
                    }
                    if(!((l <= P[i].fi && P[i].fi <= r) || (u <= P[i].se && P[i].se <= v))){
                        ok = 0;
                        break;
                    }
                }else{
                    int cnt = 0;
                    REP(j,n)if(BIT(mask, j) && P[j].fi == P[i].fi)cnt++;
                    if(cnt > 2){
                        ok = 0;
                        break;
                    }
                    cnt = 0;
                    REP(j,n)if(BIT(mask, j) && P[j].se == P[i].se)cnt++;
                    if(cnt > 2){
                        ok = 0;
                        break;
                    }
                }
            }
            if(ok){
                REP(t,n)cout<<BIT(mask, t);
                return;
            }
        }
    }
}
vector<int> col[N];
bool mark[N], markCol[N];
int main(){
//    freopen("SLAMP.INP", "r", stdin);
//    freopen("SLAMP.OUT", "w", stdout);
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n;
    REP(i,n)cin>>P[i].fi>>P[i].se;
    if(n <= 16){
        sub12::solve();
        return 0;
    }
    REP(i,n)col[P[i].se].pb(i);
    FOR(i,1,(int)1e6)if(size(col[i])){
        sort(all(col[i]));
        mark[col[i][0]] = 1;
        mark[col[i].back()] = 1;
    }
    REP(i,n)cout<<mark[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...