제출 #162090

#제출 시각아이디문제언어결과실행 시간메모리
162090Minnakhmetov무지개나라 (APIO17_rainbow)C++14
11 / 100
15 ms1016 KiB
#include "rainbow.h" #include <bits/stdc++.h> using namespace std; #define all(aaa) aaa.begin(), aaa.end() string dir = "NSEW"; const int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, 1, -1}; const int N = 52, INF = 1e9; int a[N][N]; int r, c; int mnx, mny, mxx, mxy; void init(int R, int C, int sr, int sc, int M, char *S) { r = R; c = C; a[sr][sc] = 1; mnx = sr; mxx = sr; mny = sc; mxy = sc; int x = sr, y = sc; for (int i = 0; i < M; i++) { int k = find(all(dir), S[i]) - dir.begin(); x += dx[k]; y += dy[k]; a[x][y] = 1; mnx = min(mnx, x); mxx = max(mxx, x); mny = min(mny, y); mxy = max(mxy, y); } } int colour(int ar, int ac, int br, int bc) { int ans = 1; if (ar < mnx && mxx < br && ac < mny && mxy < bc) { ans++; } // count of edges for (int i = ar; i <= br; i++) { for (int j = ac; j <= bc; j++) { ans += a[i][j] * 4; } } for (int i = ar; i < br; i++) { for (int j = ac; j <= bc; j++) { ans -= (a[i + 1][j] && a[i][j]); } } for (int i = ar; i <= br; i++) { for (int j = ac; j < bc; j++) { ans -= (a[i][j] && a[i][j + 1]); } } for (int i = ar; i <= br; i++) { ans += 2 - a[i][ac] - a[i][bc]; } for (int i = ac; i <= bc; i++) { ans += 2 - a[ar][i] - a[br][i]; } // count of vertices for (int i = ar; i < br; i++) { for (int j = ac; j < bc; j++) { if (a[i][j] || a[i + 1][j] || a[i][j + 1] || a[i + 1][j + 1]) ans--; } } ans -= (br - ar + bc - ac + 2) * 2; // count of useless faces for (int i = ar; i <= br; i++) { for (int j = ac; j <= bc; j++) { ans -= a[i][j]; } } 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...