Submission #1200708

#TimeUsernameProblemLanguageResultExecution timeMemory
1200708asli_bgLand of the Rainbow Gold (APIO17_rainbow)C++20
11 / 100
3093 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #include "rainbow.h" //#define int long long typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<bool> vb; typedef long long ll; typedef pair<ll,ll> pll; typedef vector<pll> vll; typedef tree<pii,null_type,less<pii>,rb_tree_tag, tree_order_statistics_node_update> oset; #define fi first #define se second #define pb push_back #define pf push_front #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define sp <<" "<< #define DEBUG(x) cout<<(#x) sp x<<endl #define carp(a,b) (((a%MOD)*(b%MOD))%MOD) #define topla(a,b) (((a%MOD)+(b%MOD))%MOD) const ll INF=1e18; const int MAXN=3e5+5; const int MAXK=26; const int MOD=1e9+7; vector<vi> grid; vector<vb> vis; void init(int R, int C, int sr, int sc, int M, char *S) { grid.resize(R+1,vi(C+1,0)); vis.resize(R+1,vb(C+1,false)); pii pos={sr,sc}; FOR(i,M){ grid[pos.fi][pos.se]=1; if(S[i]=='E'){ pos.se++; } else if(S[i]=='W'){ pos.se--; } else if(S[i]=='N'){ pos.fi--; } else{ pos.fi++; } } grid[pos.fi][pos.se]=1; } pii yon[]={{0,-1},{0,1},{-1,0},{1,0}}; int lim1,lim2,lim3,lim4; bool isvalid(int x,int y){ if(x<lim1 or x>lim3 or y<lim2 or y>lim4) return false; if(grid[x][y]) return false; if(vis[x][y]) return false; return true; } void bfs(int x,int y){ queue<pii> q; q.push({x,y}); while(!q.empty()){ auto el=q.front(); q.pop(); vis[el.fi][el.se]=true; FOR(i,4){ int xx=el.fi+yon[i].fi; int yy=el.se+yon[i].se; if(!isvalid(xx,yy)) continue; vis[xx][yy]=true; q.push({xx,yy}); } } } int colour(int ar, int ac, int br, int bc){ lim1=ar;lim2=ac;lim3=br;lim4=bc; for(int i=ar;i<=br;i++){ for(int j=ac;j<=bc;j++){ vis[i][j]=false; } } int say=0; for(int i=ar;i<=br;i++){ for(int j=ac;j<=bc;j++){ if(grid[i][j]==1) continue; if(vis[i][j]) continue; bfs(i,j); say++; } } return say; }
#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...