답안 #799559

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
799559 2023-07-31T15:59:22 Z burythelightdeepwithin 길고양이 (JOI20_stray) C++14
0 / 100
30 ms 17040 KB
#include <bits/stdc++.h>
#include "Anthony.h"

using namespace std;

vector <pair <int, int> > adj[20003], adj_dfs[20003];
vector <int> plan;
int vs[20003], sz[20003], start = 1;
int route[6] = {0, 1, 0, 0, 1, 1};
queue <int> q;
vector <int> leaf;

void bfs(){
    while(!q.empty()){
        int u = q.front();
        vs[u] = 1;
        q.pop();
        for (auto e: adj[u]){
            int v = e.first, id = e.second;
            if (!vs[v]){
                q.push(v);
                vs[v] = 1;
                adj_dfs[u].push_back({v, id});
                //adj_dfs[v].push_back({u, id});
                sz[u]++;
            }
        }
    }
}

void dfs(int u, int mark, int last){
    vs[u] = 1;
    if (sz[u] > 1){
        mark = 0;
        start = (last^1);
    }
    for (auto e: adj_dfs[u]){
        int v = e.first, id = e.second;
        if (!vs[v]){
            plan[id] = (route[mark]^start);
            dfs(v, (mark+1)%6, plan[id]);
        }
    }
}

vector <int> Mark(int N, int M, int A, int B, vector<int> U, vector <int> V){
    for (int i = 0; i < M; i++){
        adj[U[i]].push_back({V[i], i});
        adj[V[i]].push_back({U[i], i});
        plan.push_back(-1);
    }
    q.push(0);
    bfs();
    for (int i = 0; i < N; i++){
        vs[i] = 0;
    }
    dfs(0, 0, 0);
    for (int i = 0; i < M; i++){
        if (plan[i] == -1){
            plan[i] = 2;
        }
    }
    return plan;
}
#include <bits/stdc++.h>
#include "Catherine.h"

using namespace std;

int first = -1, last = -1, cnt = 0, one, zero;

void Init(int A, int B){

}

int Move(vector <int> y){
    if (cnt == 0){
        if (y[0] == 0){
            if (y[1] == 1){
                cnt = 3;
            } else if (y[1] == 2) {
                cnt++;
            }
            last = 1;
            one++;
            first = last;
            return 1;
        } else if (y[1] == 0){
            if (y[0] == 1){
                cnt = 3;
            } else if (y[0] == 2) {
                cnt++;
            }
            zero++;
            last = 0;
            first = last;
            return 0;
        }
        if (y[0] > y[1]){
            last = 1;
            one++;
            return 1;
        } else if (y[0] < y[1]){
            last = 0;
            zero++;
            return 0;
        } else {
            last = 0;
            zero++;
            return 0;
        }
    }
    if (cnt == 1){
        if (y[last^1] != 1){
            cnt = 3;
            return -1;
        }
        if (y[0] == 0 && y[1] == 0){
            cnt = 3;
            return -1;
        }
        if (last == 0){
            if (y[1] == 1){
                cnt++;
                last = 1;
                one++;
                return 1;
            } else if (y[0] == 1){
                cnt++;
                last = 0;
                zero++;
                return 0;
            }
        } else {
            if (y[1] == 1){
                cnt++;
                last = 1;
                one++;
                return 1;
            } else if (y[0] == 1){
                cnt++;
                last = 0;
                zero++;
                return 0;
            }
        }
    }
    if (cnt == 2){
        if (y[last^1] != 1){
            cnt = 3;
            return -1;
        }
        if (y[0] == 0 && y[1] == 0){
            cnt = 3;
            return -1;
        }
        if (zero == 2){
            if (y[1] == 1){
                cnt++;
                return -1;
            } else if (y[0] == 1){
                cnt++;
                return 0;
            }
        } else if (one == 2){
            if (y[0] == 1){
                cnt++;
                return 0;
            } else if (y[1] == 1){
                cnt++;
                return -1;
            }
        } else {
            if (first == 0){
                if (y[1] == 1){
                    cnt++;
                    return -1;
                } else if (y[0] == 1){
                    cnt++;
                    return 0;
                }
            } else {
                if (y[0] == 1){
                    cnt++;
                    return -1;
                } else if (y[1] == 1){
                    cnt++;
                    return 1;
                }
            }
        }
    }
    if (y[0] == 1){
        if (y[1] == 0){
            last = 0;
            return 0;
        } else {
            last ^= 1;
            return last;
        }
    } else if (y[1] == 1) {
        if (y[0] == 0){
            last = 1;
            return 1;
        } else {
            last ^= 1;
            return last;
        }
    }
}

Compilation message

Catherine.cpp: In function 'int Move(std::vector<int>)':
Catherine.cpp:146:1: warning: control reaches end of non-void function [-Wreturn-type]
  146 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 30 ms 17040 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 30 ms 17040 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 27 ms 14800 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 27 ms 14800 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 1800 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 28 ms 12436 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 12580 KB Wrong Answer [5]
2 Halted 0 ms 0 KB -