Submission #114265

#TimeUsernameProblemLanguageResultExecution timeMemory
114265dorijanlendvajLand of the Rainbow Gold (APIO17_rainbow)C++14
0 / 100
1150 ms49724 KiB
#include "rainbow.h" #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #define x first #define y second #define pii pair<int,int> #define pb push_back #define eb emplace_back using namespace std; using namespace __gnu_pbds; using ll=long long; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; int n,m; set<pii> s; vector<pii> ou; void init(int R, int C, int sr, int sc, int M, char *S) { vector<pii> pros; --sr; --sc; for (int i=0;i<M;++i) { //if (s.find({sr,sc})!=s.end()) s.erase({sr,sc}); pros.pb({sr,sc}); for (int k=0;k<4;++k) s.insert({sr+dx[k],sc+dy[k]}); if (S[i]=='W') --sc; if (S[i]=='E') ++sc; if (S[i]=='N') --sr; if (S[i]=='S') ++sr; } pros.pb({sr,sc}); for (int k=0;k<4;++k) s.insert({sr+dx[k],sc+dy[k]}); for (auto a: pros) if (s.find(a)!=s.end()) s.erase(a); for (auto a: s) ou.pb(a); } int cnt,par[400050]; bool pos[400050]; vector<int> nap; gp_hash_table<ll,int> nodes; void add(int i) { nap.pb(i); par[i]=i; pos[i]=1; ++cnt; } int find(int i) { if (!pos[i]) return -1; if (i==par[i]) return i; return par[i]=find(par[i]); } void merge(int a,int b) { a=find(a); b=find(b); if (a==-1 || b==-1) return; if (a==b) return; par[a]=b; --cnt; } void clear() { for (auto x: nap) { par[x]=-1; pos[x]=0; } nap.clear(); cnt=0; } int colour(int ar, int ac, int br, int bc) { int x1=ar-1,x2=br-1,y1=ac-1,y2=bc-1; int cn=1; for (auto a: ou) if (a.x>=x1 && a.x<=x2 && a.y>=y1 && a.y<=y2) { nodes[a.x*200000ll+a.y]=cn; add(cn++); for (int k=0;k<4;++k) { merge(nodes[(a.x+dx[k])*200000ll+(a.y+dy[k])],cn-1); } } int ans=cnt; clear(); return ans; }
#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...