제출 #54823

#제출 시각아이디문제언어결과실행 시간메모리
54823top34051무지개나라 (APIO17_rainbow)C++17
0 / 100
3046 ms34448 KiB
//Subtask 3 #include "rainbow.h" #include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define X first #define Y second const int maxn = 1e5 + 5; int n,m,k; pii a[maxn]; int cx[10] = {0,0,1,-1,-1,-1,1,1}; int cy[10] = {1,-1,0,0,-1,1,-1,1}; set<pii> ban, good; set<pii> vis; void dfs(int x, int y, int r1, int c1, int r2, int c2) { if(!(r1<=x && x<=r2 && c1<=y && y<=c2)) return ; vis.insert({x,y}); for(int i=0;i<8;i++) { pii t = {x+cx[i], y+cy[i]}; if(good.find(t)==good.end()) continue; if(vis.find(t)!=vis.end()) continue; dfs(x+cx[i], y+cy[i], r1,c1,r2,c2); } } void init(int R, int C, int sr, int sc, int M, char *s) { n = R; m = C; k = M; a[1] = {sr, sc}; for(int i=0;i<k;i++) { a[i+2] = a[i+1]; if(s[i]=='N') a[i+2].X--; if(s[i]=='E') a[i+2].Y++; if(s[i]=='W') a[i+2].Y--; if(s[i]=='S') a[i+2].X++; } k++; for(int i=1;i<=k;i++) { ban.insert({a[i].X,a[i].Y}); // printf("ban %d %d\n",a[i].X,a[i].Y); } for(int i=1;i<=k;i++) { for(int j=0;j<8;j++) { pii t = {a[i].X + cx[j], a[i].Y + cy[j]}; if(ban.find(t)!=ban.end()) continue; if(good.find(t)!=good.end()) continue; good.insert(t); // printf("good %d %d\n",t.X,t.Y); } } } int colour(int ar, int ac, int br, int bc) { int res = 0; vis.clear(); for(auto t : good) { if(!(ar<=t.X && t.X<=br && ac<=t.Y && t.Y<=bc)) continue; if(vis.find(t)!=vis.end()) continue; dfs(t.X,t.Y,ar,ac,br,bc); res++; } return res; }
#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...