답안 #796144

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
796144 2023-07-28T07:02:12 Z Khizri 분수 공원 (IOI21_parks) C++17
5 / 100
3500 ms 60840 KB
#include "parks.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define INF 1e18
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define pii pair<int,int>
#define pll pair<ll,ll>
#define OK cout<<"Ok"<<endl;
#define MOD (ll)(1e9+7)
const int mxn=2e5+5;
int n,x[mxn],y[mxn],p[mxn],sz[mxn];
int ax[4]={1,1,-1,-1};
int ay[4]={-1,1,1,-1};
vector<pii>vt;
map<pii,int>mp;
int fnd(int u){
    if(p[u]==u) return u;
    return p[u]=fnd(p[u]);
}
void Union(int u,int v){
    u=fnd(u);
    v=fnd(v);
    if(u!=v){
        if(sz[u]>sz[v]) swap(u,v);
        sz[u]+=sz[v];
        p[v]=u;
    }
}
int construct_roads(vector<int> xx, vector<int> yy) {
    n=xx.size();
    if(n==1){
        build({},{},{},{});
        return 1;
    }
    for(int i=0;i<n;i++){
        vt.pb({xx[i],yy[i]});
        mp[{xx[i],yy[i]}]=i+1;
        x[i+1]=xx[i];
        y[i+1]=yy[i];
    }
    //for(int i=1;i<=n;i++){
        //if(!mp[{x[i],y[i]+2}]&&!mp[{x[i],y[i]-2}]&&!mp[{x[i]+2,y[i]}]&&!mp[{x[i]-2,y[i]}]) return 0;
    //}
    sort(all(vt));
    //for(int i=1;i<n;i++){
        //if(abs(vt[i].F-vt[i-1].F)>2||abs(vt[i].S-vt[i-1].S)>2) return 0;
    //}
    set<pii>st;
    for(int i=1;i<=n;i++){
        st.insert({x[i]-1,y[i]-1});
        st.insert({x[i]+1,y[i]-1});
        st.insert({x[i]-1,y[i]+1});
        st.insert({x[i]+1,y[i]+1});
    }
    for(int i=1;i<=n;i++){
        p[i]=i;
        sz[i]=1;
    }
    vector<int>idxl,idxr,posl,posr;
    int cnt=n-1;
    int say=15;
    while(cnt&&st.size()){
        auto cur=st.begin();
        while(cur!=st.end()){
            auto it=cur++;
            int l=it->F;
            int r=it->S;
            set<int>dif;
            vector<int>idx;
            //cout<<"OK"<<endl;
            for(int i=0;i<4;i++){
                int u=l+ax[i],v=r+ay[i];
                int node=mp[{u,v}];
                if(node>0&&!dif.count(fnd(node))){
                    dif.insert(fnd(node));
                    idx.pb(node);
                }
            }
            //cout<<dif.size()<<endl;
            if(dif.size()==1){
                st.erase(it);
                continue;
            }
            if(dif.size()>2) continue;
            int q=-1,q2=1;
            for(int i=0;i<idx.size();i++){
                for(int j=i+1;j<idx.size();j++){
                    if(abs(x[idx[i]]-x[idx[j]])+abs(y[idx[i]]-y[idx[j]])==2){
                        q=i,
                        q2=j;
                        break;
                    }
                }
            }
            if(q==-1){
                st.erase(it);
                continue;
            }
            idxl.pb(idx[q]-1);
            idxr.pb(idx[q2]-1);
            //cout<<idx[0]<<' '<<idx[1]<<endl;
            posl.pb(l);
            posr.pb(r);
            Union(idx[q],idx[q2]);
            cnt--;
            st.erase(it);
        }
        //cnt--;
    }
    /*
    say=10;
    while(cnt&&st.size()){
        auto cur=st.begin();
        while(cur!=st.end()){
            auto it=cur++;
            int l=it->F;
            int r=it->S;
            set<int>dif;
            vector<int>idx;
            //cout<<"OK"<<endl;
            for(int i=0;i<4;i++){
                int u=l+ax[i],v=r+ay[i];
                int node=mp[{u,v}];
                if(node>0&&!dif.count(fnd(node))){
                    dif.insert(fnd(node));
                    idx.pb(node);
                }
            }
            //cout<<dif.size()<<endl;
            if(dif.size()==1){
                st.erase(it);
                continue;
            }
            int q=-1,q2=1;
            for(int i=0;i<idx.size();i++){
                for(int j=i+1;j<idx.size();j++){
                    if(abs(x[idx[i]]-x[idx[j]])+abs(y[idx[i]]-y[idx[j]])==2){
                        q=i,
                        q2=j;
                        break;
                    }
                }
            }
            if(q==-1){
                st.erase(it);
                continue;
            }
            idxl.pb(idx[q]-1);
            idxr.pb(idx[q2]-1);
            //cout<<idx[0]<<' '<<idx[1]<<endl;
            posl.pb(l);
            posr.pb(r);
            Union(idx[q],idx[q2]);
            cnt--;
            st.erase(it);
        }
        //cnt--;
    }
    */
    if(cnt) return 0;
    build(idxl,idxr,posl,posr);
    return 1;
}
/*
cd "c:\Users\User\Desktop\parks (4)\cpp\" ; if ($?) { g++ parks.cpp grader.cpp -o parks } ; if ($?) { .\a.exe }
5
4 4 
4 6 
6 4
4 2
2 4
*/

Compilation message

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:91:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |             for(int i=0;i<idx.size();i++){
      |                         ~^~~~~~~~~~~
parks.cpp:92:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |                 for(int j=i+1;j<idx.size();j++){
      |                               ~^~~~~~~~~~~
parks.cpp:66:9: warning: unused variable 'say' [-Wunused-variable]
   66 |     int say=15;
      |         ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 611 ms 54068 KB Output is correct
24 Incorrect 0 ms 212 KB Solution announced impossible, but it is possible.
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 611 ms 54068 KB Output is correct
24 Incorrect 0 ms 212 KB Solution announced impossible, but it is possible.
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Execution timed out 3567 ms 58852 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
17 Correct 666 ms 60840 KB Output is correct
18 Correct 647 ms 60496 KB Output is correct
19 Execution timed out 3577 ms 59604 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 279 ms 33532 KB Output is correct
10 Correct 19 ms 3412 KB Output is correct
11 Correct 120 ms 16560 KB Output is correct
12 Correct 28 ms 4840 KB Output is correct
13 Correct 85 ms 13084 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 4 ms 852 KB Output is correct
16 Correct 302 ms 33536 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 611 ms 54068 KB Output is correct
24 Incorrect 0 ms 212 KB Solution announced impossible, but it is possible.
25 Halted 0 ms 0 KB -