답안 #259720

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
259720 2020-08-08T12:00:54 Z MarcoMeijer Building Skyscrapers (CEOI19_skyscrapers) C++14
22 / 100
977 ms 14972 KB
#include <bits/stdc++.h>
using namespace std;

// macros
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ll, ll> lll;
typedef tuple<int, int, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
typedef vector<lll> vlll;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define RE(a,c) REP(a,0,c)
#define RE1(a,c) REP(a,1,c+1)
#define REI(a,b,c) REP(a,b,c+1)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define FOR(a,b) for(auto& a : b)
#define all(a) a.begin(), a.end()
#define INF 1e9
#define EPS 1e-9
#define pb push_back
#define popb pop_back
#define fi first
#define se second
#define sz size()

// input
template<class T> void IN(T& x) {cin >> x;}
template<class H, class... T> void IN(H& h, T&... t) {IN(h); IN(t...); }

// output
template<class T1, class T2> void OUT(const pair<T1,T2>& x);
template<class T> void OUT(const T& x) {cout << x;}
template<class H, class... T> void OUT(const H& h, const T&... t) {OUT(h); OUT(t...); }
template<class T1, class T2> void OUT(const pair<T1,T2>& x) {OUT(x.fi," ",x.se);}
template<class... T> void OUTL(const T&... t) {OUT(t..., "\n"); }

//===================//
//  Added libraries  //
//===================//

//===================//
//end added libraries//
//===================//

void program();
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    program();
}


//===================//
//   begin program   //
//===================//

const int MX = 5e5;

int dx4[]={-1,0,1,0};
int dy4[]={0,1,0,-1};
int dx8[]={ 0, 1, 1, 1, 0,-1,-1,-1};
int dy8[]={ 1, 1, 0,-1,-1,-1, 0, 1};

int n, t;
int R[MX], C[MX];
bitset<MX> visited;
map<ii,int> f;
set<ii> build;
set<ii> emp;
set<int> pq;
vi ans;

bool canDestroy(ii p) {
    int x=p.fi, y=p.se;
    bool foundEmpty=0;
    RE(d,4) {
        int nx=x+dx4[d];
        int ny=y+dy4[d];
        if(emp.count({nx,ny})) {
            foundEmpty=1;
            break;
        }
    }
    if(!foundEmpty) return 0;

    int start=0;
    bool isBuild[8];
    RE(d,8) {
        int nx=x+dx8[d];
        int ny=y+dy8[d];
        isBuild[d] = build.count({nx,ny});
        if(isBuild[d]) start = d;
    }

    bool last=0;
    int pos=(start+1)%8, regions=0;
    while(pos!=start) {
        int nx=x+dx8[pos];
        int ny=y+dy8[pos];
        bool cur=(emp.count({nx,ny})&&!isBuild[pos]);
        if(cur && !last) regions++;
        last = cur;
        pos=(pos+1)%8;
    }

    if(regions <= 1) return 1;
    return 0;
}
void updateBuild(ii p) {
    if(canDestroy(p)) pq.insert(f[p]);
    else pq.erase(f[p]);
}
void addEmpty(ii p) {
    if(emp.count(p)) return;
    bool foundBuild=0;
    int x=p.fi, y=p.se;
    RE(d,8) {
        int nx=x+dx8[d];
        int ny=y+dy8[d];
        if(build.count({nx,ny})) {
            foundBuild=1;
            break;
        }
    }
    if(!foundBuild) return;

    emp.insert(p);
    RE(d,4) {
        int nx=x+dx4[d];
        int ny=y+dy4[d];
        if(!build.count({nx,ny}))
            addEmpty({nx,ny});
    }
    RE(d,8) {
        int nx=x+dx8[d];
        int ny=y+dy8[d];
        if(build.count({nx,ny}))
            updateBuild({nx,ny});
    }
}

void dfsPossible(ii p) {
    if(!build.count(p)) return;
    if(visited[f[p]]) return;
    visited[f[p]] = 1;
    int x=p.fi, y=p.se;
    RE(d,8) {
        int nx=x+dx8[d];
        int ny=y+dy8[d];
        dfsPossible({nx,ny});
    }
}
bool isPossible() {
    dfsPossible({R[1],C[1]});
    RE1(i,n) if(!visited[i]) return 0;
    return 1;
}

void program() {
    IN(n,t);
    RE1(i,n) IN(R[i],C[i]);
    RE1(i,n) build.insert({R[i],C[i]});
    RE1(i,n) f[{R[i],C[i]}]=i;

    visited.reset();
    if(isPossible()) {
        ii start = *build.begin();
        start.fi--;
        addEmpty(start);
    }

    while(!pq.empty()) {
        int p = *(--pq.end());
        pq.erase(p);
        build.erase({R[p],C[p]});
        addEmpty({R[p],C[p]});
        ans.pb(p);
    }

    if(ans.sz == n) {
        OUTL("YES");
        reverse(all(ans));
        FOR(i,ans) OUTL(i);
    } else {
        OUTL("NO");
    }
}

Compilation message

skyscrapers.cpp: In function 'void program()':
skyscrapers.cpp:185:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(ans.sz == n) {
        ~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB ans=YES N=1
2 Correct 0 ms 384 KB ans=YES N=4
3 Correct 0 ms 384 KB ans=NO N=4
4 Correct 0 ms 384 KB ans=YES N=5
5 Correct 1 ms 384 KB ans=YES N=9
6 Correct 1 ms 384 KB ans=YES N=5
7 Correct 0 ms 384 KB ans=NO N=9
8 Correct 0 ms 384 KB ans=NO N=10
9 Correct 1 ms 384 KB ans=YES N=10
10 Correct 1 ms 384 KB ans=YES N=10
11 Correct 1 ms 384 KB ans=YES N=10
12 Correct 1 ms 384 KB ans=YES N=9
13 Correct 1 ms 384 KB ans=YES N=9
14 Correct 0 ms 384 KB ans=YES N=8
15 Correct 1 ms 384 KB ans=YES N=8
16 Correct 1 ms 384 KB ans=NO N=2
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB ans=YES N=1
2 Correct 0 ms 384 KB ans=YES N=4
3 Correct 0 ms 384 KB ans=NO N=4
4 Correct 0 ms 384 KB ans=YES N=5
5 Correct 1 ms 384 KB ans=YES N=9
6 Correct 1 ms 384 KB ans=YES N=5
7 Correct 0 ms 384 KB ans=NO N=9
8 Correct 0 ms 384 KB ans=NO N=10
9 Correct 1 ms 384 KB ans=YES N=10
10 Correct 1 ms 384 KB ans=YES N=10
11 Correct 1 ms 384 KB ans=YES N=10
12 Correct 1 ms 384 KB ans=YES N=9
13 Correct 1 ms 384 KB ans=YES N=9
14 Correct 0 ms 384 KB ans=YES N=8
15 Correct 1 ms 384 KB ans=YES N=8
16 Correct 1 ms 384 KB ans=NO N=2
17 Correct 1 ms 384 KB ans=YES N=17
18 Correct 1 ms 384 KB ans=YES N=25
19 Correct 1 ms 384 KB ans=YES N=100
20 Correct 2 ms 384 KB ans=YES N=185
21 Correct 1 ms 384 KB ans=NO N=174
22 Correct 2 ms 384 KB ans=YES N=90
23 Correct 1 ms 384 KB ans=YES N=63
24 Correct 1 ms 384 KB ans=YES N=87
25 Correct 2 ms 384 KB ans=YES N=183
26 Correct 2 ms 512 KB ans=YES N=188
27 Correct 2 ms 512 KB ans=YES N=183
28 Correct 3 ms 512 KB ans=YES N=189
29 Correct 2 ms 384 KB ans=YES N=200
30 Correct 3 ms 512 KB ans=YES N=190
31 Correct 2 ms 416 KB ans=YES N=187
32 Correct 3 ms 512 KB ans=YES N=187
33 Correct 3 ms 512 KB ans=YES N=182
34 Correct 3 ms 512 KB ans=YES N=184
35 Correct 3 ms 512 KB ans=YES N=188
36 Correct 3 ms 512 KB ans=YES N=181
37 Correct 3 ms 512 KB ans=YES N=188
38 Correct 3 ms 512 KB ans=YES N=191
39 Correct 3 ms 512 KB ans=YES N=196
40 Correct 3 ms 512 KB ans=YES N=196
41 Correct 3 ms 512 KB ans=YES N=196
42 Correct 2 ms 512 KB ans=YES N=196
43 Correct 3 ms 512 KB ans=YES N=195
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB ans=YES N=1
2 Correct 0 ms 384 KB ans=YES N=4
3 Correct 0 ms 384 KB ans=NO N=4
4 Correct 0 ms 384 KB ans=YES N=5
5 Correct 1 ms 384 KB ans=YES N=9
6 Correct 1 ms 384 KB ans=YES N=5
7 Correct 0 ms 384 KB ans=NO N=9
8 Correct 0 ms 384 KB ans=NO N=10
9 Correct 1 ms 384 KB ans=YES N=10
10 Correct 1 ms 384 KB ans=YES N=10
11 Correct 1 ms 384 KB ans=YES N=10
12 Correct 1 ms 384 KB ans=YES N=9
13 Correct 1 ms 384 KB ans=YES N=9
14 Correct 0 ms 384 KB ans=YES N=8
15 Correct 1 ms 384 KB ans=YES N=8
16 Correct 1 ms 384 KB ans=NO N=2
17 Correct 1 ms 384 KB ans=YES N=17
18 Correct 1 ms 384 KB ans=YES N=25
19 Correct 1 ms 384 KB ans=YES N=100
20 Correct 2 ms 384 KB ans=YES N=185
21 Correct 1 ms 384 KB ans=NO N=174
22 Correct 2 ms 384 KB ans=YES N=90
23 Correct 1 ms 384 KB ans=YES N=63
24 Correct 1 ms 384 KB ans=YES N=87
25 Correct 2 ms 384 KB ans=YES N=183
26 Correct 2 ms 512 KB ans=YES N=188
27 Correct 2 ms 512 KB ans=YES N=183
28 Correct 3 ms 512 KB ans=YES N=189
29 Correct 2 ms 384 KB ans=YES N=200
30 Correct 3 ms 512 KB ans=YES N=190
31 Correct 2 ms 416 KB ans=YES N=187
32 Correct 3 ms 512 KB ans=YES N=187
33 Correct 3 ms 512 KB ans=YES N=182
34 Correct 3 ms 512 KB ans=YES N=184
35 Correct 3 ms 512 KB ans=YES N=188
36 Correct 3 ms 512 KB ans=YES N=181
37 Correct 3 ms 512 KB ans=YES N=188
38 Correct 3 ms 512 KB ans=YES N=191
39 Correct 3 ms 512 KB ans=YES N=196
40 Correct 3 ms 512 KB ans=YES N=196
41 Correct 3 ms 512 KB ans=YES N=196
42 Correct 2 ms 512 KB ans=YES N=196
43 Correct 3 ms 512 KB ans=YES N=195
44 Correct 2 ms 640 KB ans=NO N=1934
45 Correct 2 ms 640 KB ans=NO N=1965
46 Correct 17 ms 768 KB ans=YES N=1824
47 Correct 18 ms 896 KB ans=YES N=1981
48 Correct 16 ms 768 KB ans=YES N=1814
49 Correct 20 ms 896 KB ans=YES N=1854
50 Correct 17 ms 768 KB ans=YES N=1831
51 Correct 19 ms 896 KB ans=YES N=2000
52 Correct 21 ms 896 KB ans=YES N=1847
53 Correct 23 ms 896 KB ans=YES N=1819
54 Correct 18 ms 896 KB ans=YES N=1986
55 Correct 28 ms 896 KB ans=YES N=2000
56 Correct 27 ms 1024 KB ans=YES N=1834
57 Correct 28 ms 1024 KB ans=YES N=1860
58 Correct 29 ms 1024 KB ans=YES N=1898
59 Correct 25 ms 1024 KB ans=YES N=1832
60 Correct 31 ms 1400 KB ans=YES N=1929
61 Correct 22 ms 888 KB ans=YES N=1919
62 Correct 27 ms 1024 KB ans=YES N=1882
63 Correct 31 ms 1440 KB ans=YES N=1922
64 Correct 21 ms 896 KB ans=YES N=1989
65 Correct 19 ms 1024 KB ans=YES N=1978
66 Correct 24 ms 1120 KB ans=YES N=1867
67 Incorrect 26 ms 896 KB Full cells must be connected
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 660 KB ans=NO N=1934
2 Correct 2 ms 640 KB ans=NO N=1965
3 Incorrect 19 ms 768 KB Contestant's solution is not lexicographically largest at index 1810 (1669 vs 1650)
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 384 KB ans=YES N=1
2 Correct 0 ms 384 KB ans=YES N=4
3 Correct 0 ms 384 KB ans=NO N=4
4 Correct 0 ms 384 KB ans=YES N=5
5 Correct 1 ms 384 KB ans=YES N=9
6 Correct 1 ms 384 KB ans=YES N=5
7 Correct 0 ms 384 KB ans=NO N=9
8 Correct 0 ms 384 KB ans=NO N=10
9 Correct 1 ms 384 KB ans=YES N=10
10 Correct 1 ms 384 KB ans=YES N=10
11 Correct 1 ms 384 KB ans=YES N=10
12 Correct 1 ms 384 KB ans=YES N=9
13 Correct 1 ms 384 KB ans=YES N=9
14 Correct 0 ms 384 KB ans=YES N=8
15 Correct 1 ms 384 KB ans=YES N=8
16 Correct 1 ms 384 KB ans=NO N=2
17 Correct 1 ms 384 KB ans=YES N=17
18 Correct 1 ms 384 KB ans=YES N=25
19 Correct 1 ms 384 KB ans=YES N=100
20 Correct 2 ms 384 KB ans=YES N=185
21 Correct 1 ms 384 KB ans=NO N=174
22 Correct 2 ms 384 KB ans=YES N=90
23 Correct 1 ms 384 KB ans=YES N=63
24 Correct 1 ms 384 KB ans=YES N=87
25 Correct 2 ms 384 KB ans=YES N=183
26 Correct 2 ms 512 KB ans=YES N=188
27 Correct 2 ms 512 KB ans=YES N=183
28 Correct 3 ms 512 KB ans=YES N=189
29 Correct 2 ms 384 KB ans=YES N=200
30 Correct 3 ms 512 KB ans=YES N=190
31 Correct 2 ms 416 KB ans=YES N=187
32 Correct 3 ms 512 KB ans=YES N=187
33 Correct 3 ms 512 KB ans=YES N=182
34 Correct 3 ms 512 KB ans=YES N=184
35 Correct 3 ms 512 KB ans=YES N=188
36 Correct 3 ms 512 KB ans=YES N=181
37 Correct 3 ms 512 KB ans=YES N=188
38 Correct 3 ms 512 KB ans=YES N=191
39 Correct 3 ms 512 KB ans=YES N=196
40 Correct 3 ms 512 KB ans=YES N=196
41 Correct 3 ms 512 KB ans=YES N=196
42 Correct 2 ms 512 KB ans=YES N=196
43 Correct 3 ms 512 KB ans=YES N=195
44 Correct 2 ms 640 KB ans=NO N=1934
45 Correct 2 ms 640 KB ans=NO N=1965
46 Correct 17 ms 768 KB ans=YES N=1824
47 Correct 18 ms 896 KB ans=YES N=1981
48 Correct 16 ms 768 KB ans=YES N=1814
49 Correct 20 ms 896 KB ans=YES N=1854
50 Correct 17 ms 768 KB ans=YES N=1831
51 Correct 19 ms 896 KB ans=YES N=2000
52 Correct 21 ms 896 KB ans=YES N=1847
53 Correct 23 ms 896 KB ans=YES N=1819
54 Correct 18 ms 896 KB ans=YES N=1986
55 Correct 28 ms 896 KB ans=YES N=2000
56 Correct 27 ms 1024 KB ans=YES N=1834
57 Correct 28 ms 1024 KB ans=YES N=1860
58 Correct 29 ms 1024 KB ans=YES N=1898
59 Correct 25 ms 1024 KB ans=YES N=1832
60 Correct 31 ms 1400 KB ans=YES N=1929
61 Correct 22 ms 888 KB ans=YES N=1919
62 Correct 27 ms 1024 KB ans=YES N=1882
63 Correct 31 ms 1440 KB ans=YES N=1922
64 Correct 21 ms 896 KB ans=YES N=1989
65 Correct 19 ms 1024 KB ans=YES N=1978
66 Correct 24 ms 1120 KB ans=YES N=1867
67 Incorrect 26 ms 896 KB Full cells must be connected
# 결과 실행 시간 메모리 Grader output
1 Correct 212 ms 11640 KB ans=NO N=66151
2 Correct 77 ms 8440 KB ans=NO N=64333
3 Incorrect 977 ms 14972 KB Contestant's solution is not lexicographically largest at index 69313 (69040 vs 68717)
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 660 KB ans=NO N=1934
2 Correct 2 ms 640 KB ans=NO N=1965
3 Incorrect 19 ms 768 KB Contestant's solution is not lexicographically largest at index 1810 (1669 vs 1650)
4 Halted 0 ms 0 KB -