답안 #829741

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
829741 2023-08-18T14:43:44 Z Abrar_Al_Samit 분수 공원 (IOI21_parks) C++17
5 / 100
813 ms 54208 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))) {
                int she = ft[{nx, ny}];
                if(find(i) == find(she)) continue;

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

                g[i].push_back(she);
                g[she].push_back(i);
                unite(i, she);
                u.push_back(i);
                v.push_back(she);
            }
        }
    }
    for(int i=0; i<n; ++i) {
        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))) {
                int she = ft[{nx, ny}];
                if(find(i) == find(she)) continue;

                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))) return 0;
                    ben[{x[i] + nx >> 1, ny - 1}] = 1;
                    a.push_back(x[i] + nx >> 1);
                    b.push_back(ny - 1);
                }

                g[i].push_back(she);
                g[she].push_back(i);
                unite(i, she);
                u.push_back(i);
                v.push_back(she);
            }
        }
    }
    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:50:56: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   50 |                 if(!ben.count(make_pair(x[i] - 1, y[i] + ny >> 1))) {
parks.cpp:51:41: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   51 |                     ben[{x[i] - 1, y[i] + ny >> 1}] = 1;
parks.cpp:53:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   53 |                     b.push_back(y[i] + ny >> 1);
parks.cpp:55:59: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   55 |                     if(ben.count(make_pair(x[i] + 1, y[i] + ny >> 1))) return 0;
parks.cpp:56:41: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   56 |                     ben[{x[i] + 1, y[i] + ny >> 1}] = 1;
parks.cpp:58:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   58 |                     b.push_back(y[i] + ny >> 1);
parks.cpp:76:46: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   76 |                 if(!ben.count(make_pair(x[i] + nx >> 1, ny + 1))) {
parks.cpp:77:31: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   77 |                     ben[{x[i] + nx >> 1, ny + 1}] = 1;
parks.cpp:78:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   78 |                     a.push_back(x[i] + nx >> 1);
parks.cpp:81:49: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   81 |                     if(ben.count(make_pair(x[i] + nx >> 1, ny - 1))) return 0;
parks.cpp:82:31: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   82 |                     ben[{x[i] + nx >> 1, ny - 1}] = 1;
parks.cpp:83:38: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   83 |                     a.push_back(x[i] + nx >> 1);
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
17 Correct 2 ms 4948 KB Output is correct
18 Correct 2 ms 4948 KB Output is correct
19 Correct 2 ms 4948 KB Output is correct
20 Correct 2 ms 4948 KB Output is correct
21 Correct 2 ms 4948 KB Output is correct
22 Correct 3 ms 4948 KB Output is correct
23 Incorrect 498 ms 44220 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
17 Correct 2 ms 4948 KB Output is correct
18 Correct 2 ms 4948 KB Output is correct
19 Correct 2 ms 4948 KB Output is correct
20 Correct 2 ms 4948 KB Output is correct
21 Correct 2 ms 4948 KB Output is correct
22 Correct 3 ms 4948 KB Output is correct
23 Incorrect 498 ms 44220 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
17 Correct 2 ms 4948 KB Output is correct
18 Correct 2 ms 4948 KB Output is correct
19 Correct 3 ms 5000 KB Output is correct
20 Correct 772 ms 54208 KB Output is correct
21 Correct 757 ms 53392 KB Output is correct
22 Correct 813 ms 52952 KB Output is correct
23 Correct 509 ms 45636 KB Output is correct
24 Correct 248 ms 22232 KB Output is correct
25 Correct 642 ms 44188 KB Output is correct
26 Correct 576 ms 44252 KB Output is correct
27 Correct 665 ms 50628 KB Output is correct
28 Correct 635 ms 50696 KB Output is correct
29 Correct 746 ms 50648 KB Output is correct
30 Incorrect 198 ms 22660 KB Solution announced impossible, but it is possible.
31 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
17 Correct 598 ms 53280 KB Output is correct
18 Incorrect 339 ms 34544 KB Solution announced impossible, but it is possible.
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4968 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 238 ms 29452 KB Output is correct
10 Correct 13 ms 7636 KB Output is correct
11 Correct 76 ms 18208 KB Output is correct
12 Correct 19 ms 8908 KB Output is correct
13 Correct 50 ms 14108 KB Output is correct
14 Correct 3 ms 5204 KB Output is correct
15 Correct 4 ms 5332 KB Output is correct
16 Correct 224 ms 28624 KB Output is correct
17 Correct 2 ms 4948 KB Output is correct
18 Correct 2 ms 4948 KB Output is correct
19 Correct 2 ms 4948 KB Output is correct
20 Correct 2 ms 4948 KB Output is correct
21 Correct 2 ms 4948 KB Output is correct
22 Correct 3 ms 4948 KB Output is correct
23 Incorrect 498 ms 44220 KB Solution announced impossible, but it is possible.
24 Halted 0 ms 0 KB -