Submission #95794

#TimeUsernameProblemLanguageResultExecution timeMemory
95794Bodo171Land of the Rainbow Gold (APIO17_rainbow)C++14
35 / 100
3057 ms359032 KiB
#include "rainbow.h" #include <fstream> #include <iostream> #include <map> #include <vector> #define mp make_pair using namespace std; const int nmax=200005; int d1[]={-1,0,1,0}; int d2[]={0,-1,0,1}; map< pair<int,int>,int > rb,norm; vector<int> ad[10*nmax]; pair<int,int> v[nmax]; int viz[10*nmax]; int n,nr,mnl=2*nmax,mnc=2*nmax,mxl,mxc; void add_rainbow(int l,int c) { if(!rb[mp(l,c)]) v[++n]={l,c}; rb[mp(l,c)]=1; mnl=min(mnl,l); mxl=max(mxl,l); mnc=min(mnc,c); mxc=max(mxc,c); } void add(int l,int c) { int p; if((!rb[mp(l,c)])&&(!norm[mp(l,c)])) { norm[mp(l,c)]=++nr; for(int dir=0;dir<4;dir++) { p=norm[mp(l+d1[dir],c+d2[dir])]; if(p) ad[p].push_back(nr),ad[nr].push_back(p); } } } int lim; void init(int R, int C, int sr, int sc, int M, char *S) { add_rainbow(sr,sc); lim=max(R,C); for(int i=0;i<M;i++) { if(S[i]=='N') sr--; if(S[i]=='S') sr++; if(S[i]=='W') sc--; if(S[i]=='E') sc++; add_rainbow(sr,sc); } } void dfs(int x) { viz[x]=1; for(int i=0;i<ad[x].size();i++) if(!viz[ad[x][i]]) dfs(ad[x][i]); } int colour(int ar, int ac, int br, int bc) { int cc=0; nr=0; for(int i=1;i<=n;i++) for(int p1=-1;p1<=1;p1++) for(int p2=-1;p2<=1;p2++) if(v[i].first+p1>=ar&&v[i].first+p1<=br&&v[i].second+p2>=ac&&v[i].second+p2<=bc) add(v[i].first+p1,v[i].second+p2); if(!(ar<mnl&&mxl<br&&ac<mnc&&mxc<bc)) { for(int i=ar; i<=br; i++) add(i,ac),add(i,bc); for(int i=ac; i<=bc; i++) add(ar,i),add(br,i); } for(int i=1;i<=nr;i++) if(!viz[i]) dfs(i),cc++; if(lim<=50) { norm.clear(); for(int i=1; i<=nr; i++) ad[i].clear(),viz[i]=0; } return cc; }

Compilation message (stderr)

rainbow.cpp: In function 'void dfs(int)':
rainbow.cpp:60:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<ad[x].size();i++)
                 ~^~~~~~~~~~~~~
#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...