Submission #287054

#TimeUsernameProblemLanguageResultExecution timeMemory
287054TadijaSebezStray Cat (JOI20_stray)C++14
100 / 100
69 ms19364 KiB
#include "Anthony.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define pii pair<int,int> namespace { const int N=100050; int dist[N]; vector<int> E[N]; void AddEdge(int u,int v){E[u].pb(v);E[v].pb(u);} void BFS(int n,int m){ queue<int> q; q.push(0);dist[0]=1; while(q.size()){ int u=q.front(); q.pop(); for(int v:E[u])if(!dist[v]){ dist[v]=dist[u]+1; q.push(v); } } } vector<int> Solve(int n,int m,vector<int> u,vector<int> v){ vector<int> col; for(int i=0;i<m;i++){ int a=u[i],b=v[i]; if(dist[a]>dist[b])swap(a,b); if(dist[a]==dist[b])col.pb((dist[b]+1)%3); else col.pb(dist[b]%3); } return col; } vector<int> Solve2(int n,int m,vector<int> u,vector<int> v){ vector<int> col(m); /*for(int i=0;i<m;i++){ int a=u[i],b=v[i]; if(dist[a]>dist[b])swap(a,b); if(dist[a]==dist[b])col.pb((dist[b]+1)%2); else col.pb(dist[b]%2); }*/ vector<vector<pii>> E(n); for(int i=0;i<m;i++)E[u[i]].pb({v[i],i}),E[v[i]].pb({u[i],i}); vector<int> patern={0,1,0,0,1,1}; function<void(int,int,int)> DFS=[&](int u,int p,int c){ int deg=E[u].size(); if(p!=-1)deg--; if(u){ if(deg==1)c=(c+1)%6; else c=patern[c]^1; } for(auto e:E[u])if(e.first!=p){ col[e.second]=patern[c]; DFS(e.first,u,c); } }; DFS(0,-1,0); return col; } } // namespace vector<int> Mark(int n,int m,int a,int b,vector<int> u,vector<int> v){ for(int i=0;i<m;i++)AddEdge(u[i],v[i]); BFS(n,m); if(a>2)return Solve(n,m,u,v); else return Solve2(n,m,u,v); }
#include "Catherine.h" #include <bits/stdc++.h> using namespace std; #define pb push_back namespace { int a,b,now,last,turn; bool fir,sibaj; vector<int> bits,patern={0,1,0,0,1,1}; bool Check(){ for(int i=0;i<6;i++){ bool ok=1; for(int j=0;j<5;j++){ if(bits[j]!=patern[(i+j)%6]) ok=0; } if(ok)return 1; } return 0; } } // namespace void Init(int a,int b){ ::a=a; ::b=b; fir=1; turn=0; last=-1; if(a==2){ now=1; sibaj=0; bits.clear(); } } int Move(vector<int> y){ if(a>2){ int cnt=0; for(int i=0;i<3;i++)if(y[i]!=0)cnt++; if(cnt<2){ assert(cnt==1); for(int i=0;i<3;i++)if(y[i]!=0)now=i; }else{ assert(cnt==2); if(y[0]==0)now=1; else if(y[1]==0)now=2; else now=0; } return now; }else{ turn++; int deg=y[0]+y[1]+(turn!=1); if(sibaj){ if(y[last^1])return last^=1; else return last; }else if(deg>2){ sibaj=1; if(turn!=1)y[last]++; int col; if(y[0]==1)col=0; else col=1; if(last==col)return -1; else return last=col; }else if(deg==1){ sibaj=1; if(turn==1)return last=(y[0]?0:1); else return -1; }else{ if(turn==1){ for(int i=0;i<y[0];i++)bits.pb(0); for(int i=0;i<y[1];i++)bits.pb(1); return last=bits.back(); }else if(turn<4){ int col; if(y[0])col=0; else col=1; bits.pb(col); return last=col; }else if(turn==4){ int col; if(y[0])col=0; else col=1; bits.pb(col); sibaj=1; if(Check())return -1; else return last=col; } } } }

Compilation message (stderr)

Catherine.cpp: In function 'int Move(std::vector<int>)':
Catherine.cpp:90:1: warning: control reaches end of non-void function [-Wreturn-type]
   90 | }
      | ^
#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...