Submission #234826

#TimeUsernameProblemLanguageResultExecution timeMemory
234826medkStray Cat (JOI20_stray)C++14
100 / 100
72 ms16892 KiB
#include <bits/stdc++.h> #include "Anthony.h" #define pb push_back #define eb emplace_back using namespace std; int n,m; vector<vector<pair<int,int>>> g; vector<int> seq={0,1,0,0,1,1}; vector<int> Mark1(); vector<int> Mark2(); vector<int> Mark(int N, int M, int A, int B, vector<int> U, vector<int> V){ n=N, m=M; g.resize(n); for(int i=0;i<m;i++){ g[U[i]].eb(V[i],i); g[V[i]].eb(U[i],i); } if(A>=3) return Mark1(); return Mark2(); } vector<int> Mark1(){ vector<int> dpth(n); vector<bool> vis(n); vector<int> ans(m); queue<int> bfs; bfs.push(0); dpth[0]=0; vis[0]=1; while(!bfs.empty()){ int u=bfs.front(); bfs.pop(); for(auto p:g[u]){ int v=p.first, e=p.second; if(!vis[v]){ vis[v]=1; bfs.push(v); dpth[v]=dpth[u]+1; ans[e]=dpth[v]%3; } else{ if(dpth[v]==dpth[u]) ans[e]=(dpth[v]+1)%3; else ans[e]=max(dpth[v],dpth[u])%3; } } } return ans; } vector<int> Mark2(){ vector<bool> vis(n); vector<int> ans(m); queue<pair<int,int>> bfs; bfs.push({0,0}); vis[0]=1; while(!bfs.empty()){ int u=bfs.front().first, col=bfs.front().second; bfs.pop(); for(auto p:g[u]){ int v=p.first, e=p.second; if(vis[v]) continue; vis[v]=1; if(g[u].size()<=2){ ans[e]=(col+1)%6; bfs.push({v,ans[e]}); } else{ ans[e]=seq[col]^1; bfs.push({v,ans[e]}); } } } for(int i=0;i<m;i++) ans[i]=seq[ans[i]]; return ans; }
#include <bits/stdc++.h> #include "Catherine.h" #define pb push_back #define x first #define y second using namespace std; int a; int prv=-1; bool trying=true; int cnt=0; vector<int> sq; void Init(int A, int B){ a=A; } int Move1(vector<int> arr); int Move2(vector<int> arr); int Move(vector<int> arr){ if(a>=3) return Move1(arr); return Move2(arr); } int Move1(vector<int> arr){ set<int> st={0,1,2}; for(int i=0;i<3;i++) if(arr[i]==0) st.erase(i); if(st.size()==1) return *st.begin(); if(*next(st.begin())-*st.begin()==1) return *st.begin(); return 2; } int Move2(vector<int> arr){ if(trying){ cnt++; if(cnt==1){ int sum=arr[0]+arr[1]; if(sum>2){ trying=false; if(arr[0]==1){ prv=0; return 0; } prv=1; return 1; } else{ for(int i=0;i<arr[0];i++) sq.pb(0); for(int i=0;i<arr[1];i++) sq.pb(1); prv=sq.back(); if(sum==1) trying=false; return prv; } } else{ int sum=arr[0]+arr[1]; if(sum>=2 || sum==0){ trying=false; if(arr[prv]==0){ sq.pop_back(); return -1; } else{ prv^=1; return prv; } } else{ sq.pb((int)(arr[0]==0)); if(cnt<4){ prv=sq.back(); return prv; } else{ trying=false; if(sq==vector<int>{0,1,0,0,1} || sq==vector<int>{1,0,0,1,1} || sq==vector<int>{0,0,1,1,0} || sq==vector<int>{0,1,1,0,1} || sq==vector<int>{1,1,0,1,0} || sq==vector<int>{1,0,1,0,0}){ sq.pop_back(); sq.pop_back(); return -1; } else{ prv=sq.back(); return prv; } } } } } if(arr[0]+arr[1]==1){ prv=(arr[0]==0); return prv; } prv^=1; return prv; }
#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...