제출 #786027

#제출 시각아이디문제언어결과실행 시간메모리
786027doowey길고양이 (JOI20_stray)C++14
15 / 100
44 ms16596 KiB
#include "Anthony.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair namespace { const int N = (int)20010; vector<pii> T[N]; vector<int> pattern = {1,1,0,1,0,0}; int dd[N]; } // namespace int n, m; vector<int> idx; int dep[N]; void make1(){ queue<int> que; for(int i = 0 ; i < n; i ++ ){ dep[i]=-1; } for(int i = 0 ; i < m ; i ++ ){ idx[i]=-1; } dep[0]=0; que.push(0); int nd; while(!que.empty()){ nd=que.front(); que.pop(); for(auto x : T[nd]){ if(dep[x.fi] == -1){ dep[x.fi]=(dep[nd]+1)%3; que.push(x.fi); } if(idx[x.se] == -1) idx[x.se]=dep[nd]; } } } void dfs0(int u, int par, int bit){ for(auto x : T[u]){ if(x.fi == par) continue; dd[x.fi]=dd[u]+1; if(T[x.fi].size() != 2){ idx[x.se]=bit; } else{ idx[x.se]=pattern[dd[x.fi] % 6]; } dfs0(x.fi, u, bit ^ 1); } } void make2(){ dd[0]=0; dfs0(0, -1, 0); } vector<int> Mark(int _n, int _m, int a, int b, vector<int> u, vector<int> v) { n = _n; m = _m; for(int i = 0 ; i < m ; i ++ ){ T[u[i]].push_back(mp(v[i],i)); T[v[i]].push_back(mp(u[i],i)); } idx.resize(m); if(a >= 3) make1(); else make2(); return idx; }
#include "Catherine.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair namespace { int A; vector<int> trav; int las; bool know; vector<int> pattern = {1, 1, 0, 1, 0, 0}; } // namespace void Init(int a, int b) { A = a; trav.clear(); las = -1; know = false; } int move_3(vector<int> y){ for(int d = 0; d < 3; d ++ ){ if(y[d] > 0 && y[(d + 1) % 3] > 0) return d; } for(int d = 0; d < 3; d ++ ){ if(y[d] > 0) return d; } return -1; } int move_2(vector<int> y){ vector<int> g = y; if(las != -1) g[las] ++ ; int pick = -1; if(g[0] + g[1] != 2){ know = true; trav.clear(); if(g[0] == 1) pick = 0; else pick = 1; } else{ if(know){ if(!trav.empty()){ pick = -1; las=trav.back(); trav.pop_back(); } else{ if(y[0] == 1) pick = 0; else pick = 1; las=pick; } } else{ if(trav.empty()){ for(int d = 0; d < 2; d ++ ){ for(int p = 0 ; p < y[d]; p ++ ){ trav.push_back(d); pick=d; las=d; } } } else if(trav.size() <= 3){ if(y[0]==1) pick=0; else pick=1; las = pick; trav.push_back(pick); } else{ if(y[0] == 1) trav.push_back(0); else trav.push_back(1); bool rev = false; for(int i = 0 ; i < 6 ; i ++ ){ vector<int> g; for(int j = 0 ; j < 5; j ++ ){ g.push_back(pattern[(i + j) % 6]); } if(g == trav) rev = true; } if(rev == true){ pick = -1; trav.pop_back(); trav.erase(trav.begin()); las = trav.back(); trav.pop_back(); } else{ trav.clear(); if(y[0] == 1) pick = 0; else pick = 1; las = pick; } know=true; } } } if(pick == -1 || y[pick] == 0) pick = -1; return pick; } int Move(std::vector<int> y) { if(A >= 3) return move_3(y); else{ return move_2(y); } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...