답안 #829722

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
829722 2023-08-18T14:27:40 Z Abrar_Al_Samit 분수 공원 (IOI21_parks) C++17
5 / 100
851 ms 44292 KB
#include <bits/stdc++.h>
#include "parks.h"
using namespace std;

const int nax = 200000;
vector<int>g[nax];
bool vis[nax];
int par[nax], sz[nax];

void trav(int v) {
    vis[v] = 1;
    for(int u : g[v]) if(!vis[u]) {
        trav(u);
    }
}

int find(int v) {
    return par[v] = (v==par[v]) ? v : find(par[v]);
}
void unite(int u, int v) {
    u = find(u), v = find(v);
    if(sz[u] < sz[v]) swap(u, v);
    sz[u] += sz[v];
    par[v] = u;
}
int construct_roads(vector<int> x, vector<int> y) {
    int n = x.size();
    map<pair<int,int>, int>ft;
    for(int i=0; i<n; ++i) {
        ft[{x[i], y[i]}] = i;
    }

    int dx[] = {2, -2, 0, 0};
    int dy[] = {0, 0, 2, -2};

    vector<int>u, v, a, b;

    map<pair<int,int>, int>ben;

    for(int i=0; i<n; ++i) {
        par[i] = i, sz[i] = 1;
    }
    for(int i=0; i<n; ++i) {
        for(int j=2; j<4; ++j) {
            int nx = x[i] + dx[j], ny = y[i] + dy[j];
            if(ft.count(make_pair(nx, ny))) {
                if(find(i) == find(ft[{nx, ny}])) continue;

                if((y[i]+ny)%8<4) {
                    a.push_back(x[i]-1);
                    b.push_back(y[i] + ny >> 1);
                    ben[{x[i]-1, y[i] + ny >> 1}] = 1;
                } else {
                    a.push_back(x[i]+1);
                    b.push_back(y[i] + ny >> 1);
                    ben[{x[i]+1, y[i] + ny >> 1}] = 1;
                }
                g[i].push_back(ft[{nx, ny}]);
                g[ft[{nx, ny}]].push_back(i);
                unite(i, ft[{nx, ny}]);
                u.push_back(i);
                v.push_back(ft[{nx, ny}]);
            }
        }
    }

    for(int i=0; i<n; ++i) {
        if(ft.count(make_pair(x[i]+dx[0], y[i]))
            + ft.count(make_pair(x[i]+dx[1], y[i]))==1) {
            for(int j=0; j<2; ++j) {
                int nx = x[i] + dx[j], ny = y[i] + dy[j];
                if(!ft.count(make_pair(nx, ny))) continue;

                int she = ft[{nx, ny}];
                if(find(i) == find(she)) continue;

                g[i].push_back(she);
                g[she].push_back(i);
                unite(i, she);
                u.push_back(i);
                v.push_back(she);

                if(!ben.count(make_pair(x[i] + nx >> 1, ny - 1))) {
                    ben[{x[i] + nx >> 1, ny - 1}] = 1;
                    a.push_back(x[i] + nx >> 1);
                    b.push_back(ny - 1);
                } else if(!ben.count(make_pair(x[i] + nx >> 1, ny + 1))) {
                    ben[{x[i] + nx >> 1, ny + 1}] = 1;
                    a.push_back(x[i] + nx >> 1);
                    b.push_back(ny + 1);

                } else return 0;
            }
        }
    }
    trav(0);
    for(int i=0; i<n; ++i) if(!vis[i]) {
        return 0;
    }

    build(u, v, a, b);
    return 1;
}

Compilation message

parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:51:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   51 |                     b.push_back(y[i] + ny >> 1);
parks.cpp:52:39: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   52 |                     ben[{x[i]-1, y[i] + ny >> 1}] = 1;
parks.cpp:55:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   55 |                     b.push_back(y[i] + ny >> 1);
parks.cpp:56:39: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   56 |                     ben[{x[i]+1, y[i] + ny >> 1}] = 1;
parks.cpp:83:46: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   83 |                 if(!ben.count(make_pair(x[i] + nx >> 1, ny - 1))) {
parks.cpp:84:31: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   84 |                     ben[{x[i] + nx >> 1, ny - 1}] = 1;
parks.cpp:85:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   85 |                     a.push_back(x[i] + nx >> 1);
parks.cpp:87:53: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   87 |                 } else if(!ben.count(make_pair(x[i] + nx >> 1, ny + 1))) {
parks.cpp:88:31: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   88 |                     ben[{x[i] + nx >> 1, ny + 1}] = 1;
parks.cpp:89:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   89 |                     a.push_back(x[i] + nx >> 1);
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
17 Correct 3 ms 5012 KB Output is correct
18 Correct 4 ms 5008 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 3 ms 4948 KB Output is correct
21 Correct 3 ms 4976 KB Output is correct
22 Correct 3 ms 4956 KB Output is correct
23 Incorrect 851 ms 44292 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
17 Correct 3 ms 5012 KB Output is correct
18 Correct 4 ms 5008 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 3 ms 4948 KB Output is correct
21 Correct 3 ms 4976 KB Output is correct
22 Correct 3 ms 4956 KB Output is correct
23 Incorrect 851 ms 44292 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 5012 KB Output is correct
19 Correct 2 ms 5008 KB Output is correct
20 Incorrect 582 ms 36440 KB Solution announced impossible, but it is possible.
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
17 Incorrect 524 ms 33316 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 4 ms 5012 KB Output is correct
4 Correct 3 ms 4948 KB Output is correct
5 Correct 3 ms 4956 KB Output is correct
6 Correct 4 ms 4948 KB Output is correct
7 Correct 3 ms 4948 KB Output is correct
8 Correct 4 ms 5008 KB Output is correct
9 Correct 358 ms 29456 KB Output is correct
10 Correct 19 ms 7632 KB Output is correct
11 Correct 110 ms 18348 KB Output is correct
12 Correct 29 ms 9044 KB Output is correct
13 Correct 72 ms 14296 KB Output is correct
14 Correct 4 ms 5144 KB Output is correct
15 Correct 6 ms 5408 KB Output is correct
16 Correct 346 ms 28796 KB Output is correct
17 Correct 3 ms 5012 KB Output is correct
18 Correct 4 ms 5008 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 3 ms 4948 KB Output is correct
21 Correct 3 ms 4976 KB Output is correct
22 Correct 3 ms 4956 KB Output is correct
23 Incorrect 851 ms 44292 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -