Submission #95789

#TimeUsernameProblemLanguageResultExecution timeMemory
95789Bodo171Land of the Rainbow Gold (APIO17_rainbow)C++14
0 / 100
3040 ms162684 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[8*nmax]; pair<int,int> v[nmax]; int viz[8*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((!norm[mp(l,c)])&&(!rb[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); } } } void init(int R, int C, int sr, int sc, int M, char *S) { add_rainbow(sr,sc); 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; if(ar<mnl&&mxl<br&&ac<mnc&&mxc<bc) return 1; for(int i=1;i<=n;i++) for(int dir=0;dir<4;dir++) if(v[i].first+d1[dir]>=ar&&v[i].first+d1[dir]<=br&&v[i].second+d2[dir]>=ac&&v[i].second+d2[dir]<=bc) add(v[i].first+d1[dir],v[i].second+d2[dir]); 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++; 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:58: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...