제출 #73457

#제출 시각아이디문제언어결과실행 시간메모리
73457FedericoSLand of the Rainbow Gold (APIO17_rainbow)C++14
0 / 100
4 ms628 KiB
#include <iostream> #include <queue> #include <set> #include "rainbow.h" using namespace std; bool B[3][100005]; bool V[3][100005]; int R,C; int rmov[]={1,-1,0,0}; int cmov[]={0,0,1,-1}; queue<pair<int,int>> Q; set<pair<int,int>> S[3]; void init(int R_, int C_, int sr, int sc, int M, char *W) { R=R_; C=C_; B[1][0]=B[2][0]=true; B[1][C+1]=B[2][C+1]=true; B[sr][sc]=true; int cont=0; for(int i=0;i<M;i++){ if(W[i]=='S') sr++; if(W[i]=='N') sr--; if(W[i]=='E') sc++; if(W[i]=='W') sc--; B[sr][sc]=true; } for(int r=1;r<R+1;r++) for(int i=1;i<C+2;i++) if(B[r][i] and !B[r][i-1]) S[r-1].insert({i,cont++}); else if(!B[r][i] and B[r][i-1]) S[r-1].insert({i,cont}); for(int i=1;i<C+2;i++) if((B[2][i]|B[1][i]) and !(B[2][i-1]|B[1][i-1])) S[2].insert({i,cont++}); else if(!(B[2][i]|B[1][i]) and (B[2][i-1]|B[1][i-1])) S[2].insert({i,cont}); /*for(int k=0;k<3;k++){ for(auto p:S[k]) cout<<p.first<<","<<p.second<<" "; cout<<endl; }*/ } int colour(int ar, int ac, int br, int bc) { int k; if(ar==0 and br==0) k=0; if(ar==1 and br==1) k=1; if(ar==0 and br==1) k=2; return (*(--S[k].lower_bound({bc+1,-1}))).second-(*(S[k].lower_bound({ac,-1}))).second+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...