Submission #57363

#TimeUsernameProblemLanguageResultExecution timeMemory
57363wilwxkLand of the Rainbow Gold (APIO17_rainbow)C++11
12 / 100
135 ms19180 KiB
#include "rainbow.h" #include <bits/stdc++.h> using namespace std; const int MAXN=2e5+5; int v[3][MAXN], cor[3][3][MAXN]; int erro[4][MAXN], soma[4][MAXN]; int kc[3][3]; int n, m; void dfs(int k, int ind, int val) { for(int i=ind; i<=m; i++) { if(v[k][i]) return; cor[1][k][i]=val; } } void dfs2(int ox, int oy, int val) { cor[2][ox][oy]=val; int outro=((ox)%2)+1; if(cor[2][outro][oy]==0&&v[outro][oy]!=1) dfs2(outro, oy, val); if(oy+1>m) return; if(cor[2][ox][oy+1]==0&&v[ox][oy+1]!=1) dfs2(ox, oy+1, val); } void init(int R, int C, int sr, int sc, int M, char *S) { int cx=sr, cy=sc; n=R; m=C; v[cx][cy]=1; for(int i=0; i<M; i++) { if(S[i]=='N') cx--; if(S[i]=='S') cx++; if(S[i]=='W') cy--; if(S[i]=='E') cy++; v[cx][cy]=1; } kc[1][1]=1; kc[1][2]=1; kc[2][2]=1; for(int i=1; i<=C; i++) { for(int k=1; k<=2; k++) { if(cor[1][k][i]==0&&!v[k][i]) dfs(k, i, kc[1][k]++); if(cor[2][k][i]==0&&!v[k][i]) dfs2(k, i, kc[2][2]++); } soma[1][i]=max(cor[1][1][i], soma[1][i-1]); soma[2][i]=max(cor[1][2][i], soma[2][i-1]); soma[3][i]=max(soma[3][i-1], max(cor[2][1][i], cor[2][2][i])); } for(int k=1; k<=2; k++) { //for(int i=1; i<=m; i++) printf("%d ", soma[k][i]); printf("\n"); } } int colour(int ar, int ac, int br, int bc) { if(ar==br) { int resp=soma[ar][bc]-soma[ar][ac]+1; if(v[ar][ac]) resp--; return resp; } else { int resp=soma[3][bc]-soma[3][ac]+1; if(v[1][ac]&&v[2][ac]) resp--; return resp; } return 0; }
#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...