제출 #948536

#제출 시각아이디문제언어결과실행 시간메모리
948536vjudge1무지개나라 (APIO17_rainbow)C++17
0 / 100
16 ms8792 KiB
#include "rainbow.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; #define ios ios::sync_with_stdio(false); cin.tie(NULL); #define pb push_back #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define fr first #define sc second const int N=2e5+5; int n,m,t,q; int used[1005][1005]; vector< vector< int> > a; void dfs(int x, int y, int x1, int x2, int y1, int y2){ if(used[x][y]) return; if(x<x1 || x>x2 || y<y1 || y>y2 || a[x][y]) return; used[x][y]=1; dfs(x-1,y,x1,x2,y1,y2); dfs(x+1,y,x1,x2,y1,y2); dfs(x,y-1,x1,x2,y1,y2); dfs(x,y+1,x1,x2,y1,y2); } int pref[N],pr[N][2]; void init(int R, int C, int sr, int sc, int M, char *S) { n=R,m=C; int x=sr,y=sc; t=M; a.resize(n+1,vector<int>(m+1)); a[x][y]=1; for(int i=0;i<t;i++){ char c=S[i]; if(c=='N') x--; else if(c=='S') x++; else if(c=='E') y++; else y--; a[x][y]=1; } a[1][0]=a[2][0]=1; for(int i=1;i<=m;i++){ pr[i][0]+=pr[i-1][0]; pr[i][1]+=pr[i-1][1]; pref[i]+=pref[i-1]; if(a[1][i] && a[2][i]) continue; if(a[1][i-1] && a[2][i-1]) pref[i]++; if(a[1][i-1] && !a[1][i]) pr[i][0]++; if(a[2][i-1] && !a[2][i]) pr[i][1]++; } } int colour(int ar, int ac, int br, int bc) { if(n==2){ if(ar==br){ if(ar==1) return pr[bc][0]-pr[ac-1][0]; else return pr[bc][1]-pr[ac-1][1]; } else{ return pref[bc]-pref[ac-1]; } } else{ int x1=ar,x2=br,y1=ac,y2=bc; for(int i=x1;i<=x2;i++) for(int j=y1;j<=y2;j++) used[i][j]=0; int ans=0; for(int i=x1;i<=x2;i++){ for(int j=y1;j<=y2;j++){ if(!used[i][j] && !a[i][j]){ ans++; dfs(i,j,x1,x2,y1,y2); } } } 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...