제출 #1302339

#제출 시각아이디문제언어결과실행 시간메모리
1302339txq2109Towers (NOI22_towers)C++20
11 / 100
2099 ms250056 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pu push
#define pb push_back
#define el cout<<"\n";
#define endl "\n"
#define M 1000006
#define ii pair<int,int>

using namespace std;
int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1};
int n,m,ans=0,xmax=0,ymax=0,xmin=LLONG_MAX,ymin=LLONG_MAX;
bool solve=0;
vector<ii> a;
map<pair<int,int>,int> mp;
vector<vector<int>> yarray;
vector<int> ylist,mpy;

bool out(vector<int> x)
{
    vector<int> none;
    for(int i=1;i<=n;i++) {
        if(!x[i]) {
            vector<int> check(4,0);
            for(int j=0;j<=3;j++) {
                int xx=a[i].fi,yy=a[i].se;
                while(xx<=xmax&&yy<=ymax&&xx>=xmin&&yy>=ymin) {
                    xx+=dx[j],yy+=dy[j];
                    if(x[mp[{xx,yy}]]) { check[j]=1; break; }
                }
            }
            if(check[0]&&check[2]) continue;
            if(check[1]&&check[3]) continue;

            return false;
        }
    }
    for(int i=1;i<=n;i++) cout<<x[i];
    return true;
}

void backtrack(int i,int n,vector<int> x)
{
    if(solve) return;
    if(i>n) {
        if(out(x)) solve=1;
        return;
    }
    for(int j=0;j<=1;j++) {
        x[i]=j;
        backtrack(i+1,n,x);
    }
}

void sub2()
{
    vector<int> x(n+1);
    backtrack(1,n,x);
    return ;
}

void sub3()
{
    vector<int> res(n+1,0);
    for(auto y:ylist) {
        if(yarray[y].size()<2) res[mp[{yarray[y][0],y}]]=1;
        else {
            int minn=LLONG_MAX,maxx=LLONG_MIN;
            for(auto x:yarray[y]) minn=min(minn,x),maxx=max(maxx,x);
            res[mp[{minn,y}]]=1;
            res[mp[{maxx,y}]]=1;
        }
    }
    for(int i=1;i<=n;i++) cout<<res[i];

}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    #define FILE "SLAMP"
    if(fopen(FILE".inp","r")) {
        freopen(FILE".inp","r",stdin);
        freopen(FILE".out","w",stdout);
    }
    cin>>n;
    a.assign(n+1,{});
    yarray.assign(M,vector<int> {});
    mpy.assign(M,0);
    for(int i=1;i<=n;i++) {
        cin>>a[i].fi>>a[i].se;
        xmax=max(xmax,a[i].fi);
        ymax=max(ymax,a[i].se);
        xmin=min(xmin,a[i].fi);
        ymin=min(ymin,a[i].se);
        mp[{a[i].fi,a[i].se}]=i;
        yarray[a[i].se].pb(a[i].fi);
        if(!mpy[a[i].se]) {
            mpy[a[i].se]=1;
            ylist.pb(a[i].se);
        }
    }
    if(n<=16) sub2();
    else sub3();
    return 0;
}

//txq - ctq

컴파일 시 표준 에러 (stderr) 메시지

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