답안 #1059426

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1059426 2024-08-14T23:56:47 Z Trent 분수 공원 (IOI21_parks) C++17
5 / 100
111 ms 25368 KB
#include "parks.h"
#include "bits/stdc++.h"
using namespace std;
#define forR(i, x) for(int i = 0; i < (x); ++i)
#define REP(i, a, b) for(int i = (a); i < (b); ++i)
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef set<int> si;
struct pii{int a, b;};
bool operator <(pii a, pii b) {return a.a < b.a || a.a == b.a && a.b < b.b;}
const int MD = 2e5 + 10;

bool conn(int n, vi& u, vi& v) {
    vvi adj(n);
    forR(i, u.size()) {
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    vb vis(n);
    vi dfs = {0};
    while(!dfs.empty()) {
        int cur = dfs.back(); dfs.pop_back();
        if(!vis[cur]) {
            vis[cur] = true;
            for(int i : adj[cur]) if(!vis[i]) {
                dfs.push_back(i);
            }
        }
    }
    forR(i, n) if(!vis[i]) return false;
    return true;
}
int construct_roads(std::vector<int> x, std::vector<int> y) {
    int n = x.size();
    map<pii, int> ci;
    set<pii> bnch;
    forR(i, n) ci[{x[i], y[i]}] = i;
    vi u, v, a, b;

    for(int y = 2; y < MD; y += 2) {
        if(ci.count({2, y}) && ci.count({2, y+2})) {
            u.push_back(ci[{2,y}]);
            v.push_back(ci[{2, y+2}]);
            a.push_back(1);
            b.push_back(y + 1);
            bnch.insert({1, y+1});
        }
        if(ci.count({6, y}) && ci.count({6, y+2})) {
            u.push_back(ci[{6,y}]);
            v.push_back(ci[{6, y+2}]);
            a.push_back(7);
            b.push_back(y + 1);
            bnch.insert({7, y+1});
        }
        if(ci.count({4, y}) && ci.count({4, y+2})) {
            u.push_back(ci[{4,y}]);
            v.push_back(ci[{4, y+2}]);
            a.push_back(y % 4 == 0 ? 5 : 3);
            b.push_back(y + 1);
            bnch.insert({a.back(), b.back()});
        }
    }
    bool lasAdd = false;
    for(int y = 2; y < MD; y += 2) {
        if(lasAdd) lasAdd = false;
        else {
            if(ci.count({4, y}) && ci.count({2, y})) {
                u.push_back(ci[{4, y}]);
                v.push_back(ci[{2, y}]);
                a.push_back(3);
                if(bnch.count({3, y + 1})) b.push_back(y+1);
                else {
                    assert(!bnch.count({3, y-1}));
                    b.push_back(y-1);
                }
                bnch.insert({a.back(), b.back()});
                lasAdd = true;
            }
        }
    }
    lasAdd = false;
    for(int y = 2; y < MD; y += 2) {
        if(lasAdd) lasAdd = false;
        else {
            if(ci.count({4, y}) && ci.count({6, y})) {
                u.push_back(ci[{4, y}]);
                v.push_back(ci[{6, y}]);
                a.push_back(5);
                if(bnch.count({5, y + 1})) b.push_back(y+1);
                else {
                    assert(!bnch.count({5, y-1}));
                    b.push_back(y-1);
                }
                bnch.insert({a.back(), b.back()});
                lasAdd = true;
            }
        }
    }
    if(conn(n, u, v)) {
        build(u, v, a, b);
        return 1;
    }
    return 0;
}

Compilation message

parks.cpp: In function 'bool operator<(pii, pii)':
parks.cpp:12:63: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   12 | bool operator <(pii a, pii b) {return a.a < b.a || a.a == b.a && a.b < b.b;}
      |                                                    ~~~~~~~~~~~^~~~~~~~~~~~
parks.cpp: In function 'bool conn(int, vi&, vi&)':
parks.cpp:4:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define forR(i, x) for(int i = 0; i < (x); ++i)
      |                                     ^
parks.cpp:17:5: note: in expansion of macro 'forR'
   17 |     forR(i, u.size()) {
      |     ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
17 Incorrect 2 ms 344 KB Tree @(3, 3) appears more than once: for edges on positions 1 and 2
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
17 Incorrect 2 ms 344 KB Tree @(3, 3) appears more than once: for edges on positions 1 and 2
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
17 Incorrect 2 ms 348 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
17 Incorrect 111 ms 25368 KB Solution announced impossible, but it is possible.
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 2 ms 348 KB Output is correct
6 Correct 2 ms 348 KB Output is correct
7 Correct 2 ms 348 KB Output is correct
8 Correct 2 ms 348 KB Output is correct
9 Correct 94 ms 19880 KB Output is correct
10 Correct 25 ms 2396 KB Output is correct
11 Correct 74 ms 10852 KB Output is correct
12 Correct 30 ms 3156 KB Output is correct
13 Correct 57 ms 8904 KB Output is correct
14 Correct 4 ms 600 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 102 ms 19892 KB Output is correct
17 Incorrect 2 ms 344 KB Tree @(3, 3) appears more than once: for edges on positions 1 and 2
18 Halted 0 ms 0 KB -