제출 #408626

#제출 시각아이디문제언어결과실행 시간메모리
408626syl123456무지개나라 (APIO17_rainbow)C++17
23 / 100
3063 ms1048580 KiB
#include "rainbow.h" #include <bits/stdc++.h> using namespace std; vector<vector<bool>> b; vector<int> p, cnt1, cnt2, cnt3; int n, m; void init2() { cnt1 = cnt2 = cnt3 = vector<int>(m, 0); cnt1[0] = !b[0][0]; cnt2[0] = !b[1][0]; cnt3[0] = cnt1[0] | cnt2[0]; for (int i = 1; i < m; ++i) { cnt1[i] = cnt1[i - 1] + (!b[0][i] && b[0][i - 1]); cnt2[i] = cnt2[i - 1] + (!b[1][i] && b[1][i - 1]); if (!b[0][i] && !b[1][i]) cnt3[i] = cnt3[i - 1] + (b[0][i - 1] && b[1][i - 1]); else cnt3[i] = cnt3[i - 1] + (!b[0][i] && b[0][i - 1]) + (!b[1][i] && b[1][i - 1]); } } void init(int R, int C, int sr, int sc, int M, char *S) { n = R, m = C; b.assign(R, vector<bool>(C, false)); --sr, --sc; b[sr][sc] = true; for (int i = 0; i < M; ++i) { if (S[i] == 'N') --sr; else if (S[i] == 'S') ++sr; else if (S[i] == 'W') --sc; else ++sc; b[sr][sc] = true; } if (n == 2) init2(); p.resize(R * C); } int colour2(int ar, int ac, int br, int bc) { --ar, --ac, --br, --bc; if (ar == 1) return cnt2[bc] - cnt2[ac] + (!b[1][ac]); if (br == 0) return cnt1[bc] - cnt1[ac] + (!b[0][ac]); return cnt3[bc] - cnt3[ac] + (!b[0][ac] || !b[1][ac]); } int colour(int ar, int ac, int br, int bc) { if (n == 2) return colour2(ar, ac, br, bc); --ar, --ac; int _ = 0; for (int i = ar; i < br; ++i) for (int j = ac; j < bc; ++j) p[i * m + j] = i * m + j; function<int(int)> find = [&](int i) { return p[i] = p[i] == i ? i : find(p[i]); }; for (int i = ar; i < br; ++i) for (int j = ac; j < bc; ++j) if (!b[i][j]) { if (i < br - 1 && !b[i + 1][j]) p[find(i * m + j)] = find((i + 1) * m + j); if (j < bc - 1 && !b[i][j + 1]) p[find(i * m + j)] = find(i * m + j + 1); } int ans = 0; for (int i = ar; i < br; ++i) for (int j = ac; j < bc; ++j) if (!b[i][j]) ans += find(i * m + j) == i * m + j; return ans; } /* * Q(NlogM + MlogN)logMN + NMlogNlogM * ^ * | * uni-sort * QNlogNlogM */

컴파일 시 표준 에러 (stderr) 메시지

rainbow.cpp: In function 'int colour(int, int, int, int)':
rainbow.cpp:46:9: warning: unused variable '_' [-Wunused-variable]
   46 |     int _ = 0;
      |         ^
#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...