답안 #678652

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
678652 2023-01-06T09:26:05 Z qwerasdfzxcl 무지개나라 (APIO17_rainbow) C++17
11 / 100
3000 ms 166216 KB
#include "rainbow.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int dx8[9] = {-1, -1, -1, 0, 1, 1, 1, 0, -1}, dy8[9] = {-1, 0, 1, 1, 1, 0, -1, -1, -1};
set<pair<int, int>> st;

void init(int R, int C, int sr, int sc, int M, char *S) {
    st.emplace(sr, sc);

    for (int i=0;i<M;i++){
        int k;
        if (S[i]=='N') k = 0;
        if (S[i]=='E') k = 1;
        if (S[i]=='S') k = 2;
        if (S[i]=='W') k = 3;

        sr += dx[k], sc += dy[k];
        st.emplace(sr, sc);
    }
}

bool valid(int x, int y, int ar, int ac, int br, int bc){
    if (st.find(make_pair(x, y))!=st.end()) return 0;
    return ar <= x && x <= br && ac <= y && y <= bc;
}

void add_edge(int x1, int y1, int x2, int y2, set<pair<int, int>> &V, map<pair<int, int>, vector<pair<int, int>>> &E, int ar, int ac, int br, int bc){
    if (valid(x1, y1, ar, ac, br, bc)) V.emplace(x1, y1);
    if (valid(x2, y2, ar, ac, br, bc)) V.emplace(x2, y2);

    if (!valid(x1, y1, ar, ac, br, bc)) return;
    if (!valid(x2, y2, ar, ac, br, bc)) return;

    auto p1 = make_pair(x1, y1);
    auto p2 = make_pair(x2, y2);
    E[p1].push_back(p2);
    E[p2].push_back(p1);

    //printf("add_edge: %d %d %d %d\n", x1, y1, x2, y2);
}

void dfs(int x, int y, map<pair<int, int>, vector<pair<int, int>>> &E, set<pair<int, int>> &visited){
    visited.emplace(x, y);
    auto p = make_pair(x, y);
    for (auto np:E[p]) if (visited.find(np)==visited.end()){
        dfs(np.first, np.second, E, visited);
    }
}

int colour(int ar, int ac, int br, int bc) {
    ar = max(ar, st.begin()->first-1);
    set<pair<int, int>> V, visited;
    map<pair<int, int>, vector<pair<int, int>>> E;

    for (int i=ar;i<=br;i++){
        add_edge(i, ac, i+1, ac, V, E, ar, ac, br, bc);
        add_edge(i, bc, i+1, bc, V, E, ar, ac, br, bc);
    }

    for (int j=ac;j<=bc;j++){
        add_edge(ar, j, ar, j+1, V, E, ar, ac, br, bc);
        add_edge(br, j, br, j+1, V, E, ar, ac, br, bc);
    }

    for (auto [x, y]:st){
        for (int k=0;k<8;k++){
            int nx1 = x + dx8[k], ny1 = y + dy8[k];
            int nx2 = x + dx8[k+1], ny2 = y + dy8[k+1];

            add_edge(nx1, ny1, nx2, ny2, V, E, ar, ac, br, bc);
        }
    }

    int ret = 0;
    for (auto &[x, y]:V) if (visited.find(make_pair(x, y))==visited.end()) {dfs(x, y, E, visited); ret++;}
    return ret;
}

Compilation message

rainbow.cpp: In function 'void init(int, int, int, int, int, char*)':
rainbow.cpp:20:32: warning: 'k' may be used uninitialized in this function [-Wmaybe-uninitialized]
   20 |         sr += dx[k], sc += dy[k];
      |                            ~~~~^
# 결과 실행 시간 메모리 Grader output
1 Correct 175 ms 336 KB Output is correct
2 Correct 989 ms 688 KB Output is correct
3 Correct 263 ms 404 KB Output is correct
4 Correct 343 ms 340 KB Output is correct
5 Correct 1300 ms 592 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 276 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 527 ms 424 KB Output is correct
12 Correct 932 ms 452 KB Output is correct
13 Correct 1862 ms 856 KB Output is correct
14 Correct 2027 ms 716 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Execution timed out 3079 ms 92060 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 885 ms 82660 KB Output is correct
3 Correct 1000 ms 110032 KB Output is correct
4 Correct 966 ms 108480 KB Output is correct
5 Correct 421 ms 40592 KB Output is correct
6 Correct 588 ms 95632 KB Output is correct
7 Correct 1138 ms 166216 KB Output is correct
8 Correct 158 ms 10372 KB Output is correct
9 Correct 116 ms 6664 KB Output is correct
10 Correct 52 ms 3452 KB Output is correct
11 Incorrect 80 ms 2772 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 175 ms 336 KB Output is correct
2 Correct 989 ms 688 KB Output is correct
3 Correct 263 ms 404 KB Output is correct
4 Correct 343 ms 340 KB Output is correct
5 Correct 1300 ms 592 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 276 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 527 ms 424 KB Output is correct
12 Correct 932 ms 452 KB Output is correct
13 Correct 1862 ms 856 KB Output is correct
14 Correct 2027 ms 716 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Execution timed out 3061 ms 15364 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 175 ms 336 KB Output is correct
2 Correct 989 ms 688 KB Output is correct
3 Correct 263 ms 404 KB Output is correct
4 Correct 343 ms 340 KB Output is correct
5 Correct 1300 ms 592 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 276 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 527 ms 424 KB Output is correct
12 Correct 932 ms 452 KB Output is correct
13 Correct 1862 ms 856 KB Output is correct
14 Correct 2027 ms 716 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Execution timed out 3061 ms 15364 KB Time limit exceeded
19 Halted 0 ms 0 KB -