제출 #786559

#제출 시각아이디문제언어결과실행 시간메모리
786559doowey길고양이 (JOI20_stray)C++14
100 / 100
45 ms17000 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){ vector<pii> nex; for(auto x : T[u]){ if(x.fi == par) continue; nex.push_back(x); } if(nex.size() == 1){ if(dd[u]==-1){ dd[u]=0; while(pattern[dd[u]] != bit) dd[u] ++ ; } dd[nex[0].fi] = (dd[u] + 1) % 6; idx[nex[0].se] = pattern[dd[nex[0].fi]]; dfs0(nex[0].fi, u, pattern[(dd[u] + 1) % 6]); } else{ for(auto x : nex){ idx[x.se] = bit ^ 1; dfs0(x.fi, u, bit ^ 1); } } } void make2(){ for(int i = 0 ; i < n; i ++ ){ dd[i]=-1; } 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; int step; 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){ step ++ ; 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; las = pick; } else{ if(know){ 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 < trav.size(); j ++ ){ g.push_back(pattern[(i + j) % 6]); } if(g == trav) rev = true; } if(rev == true){ pick = -1; trav.pop_back(); las = trav.back(); } else{ if(y[0] == 1) pick = 0; else pick = 1; las = pick; } trav.clear(); 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; }

컴파일 시 표준 에러 (stderr) 메시지

Catherine.cpp: In function 'int move_2(std::vector<int>)':
Catherine.cpp:86:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |      for(int j = 0 ; j < trav.size(); j ++ ){
      |                      ~~^~~~~~~~~~~~~
#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...