제출 #233586

#제출 시각아이디문제언어결과실행 시간메모리
233586thecodingwizardDango Maker (JOI18_dango_maker)C++11
13 / 100
6 ms384 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ii pair<int, int> #define pA first #define pB second #define F0R(i, a) for (int i = 0; i < (a); i++) #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define vi vector<int> #define pb push_back void getCt(int i, int j); int n, m; char A[3000][3000]; string match = "RGW"; bool valid(int i, int j, int dx, int dy) { int startMult = A[i][j] == 'R' ? 0 : (A[i][j] == 'G' ? 1 : 2); int ct = 0; FOR(x, i-dx*startMult, i+dx*(2-startMult)+1) { FOR(y, j-dy*startMult, j+dy*(2-startMult)+1) { if (x<0||x>=n||y<0||y>=m) return false; if (A[x][y] != match[ct++]) return false; } } return true; } set<int> seen; set<int> gotExtra; map<int, vi> adj; int getId(int i, int j, int dx, int dy) { int startMult = A[i][j] == 'R' ? 0 : (A[i][j] == 'G' ? 1 : 2); FOR(x, i-dx*startMult, i+dx*(2-startMult)+1) { FOR(y, j-dy*startMult, j+dy*(2-startMult)+1) { return x*3000+y+dx*3000*3000*1+dy*3000*3000*2; } } return -1; } void process(int i, int j, int dx, int dy) { int startMult = A[i][j] == 'R' ? 0 : (A[i][j] == 'G' ? 1 : 2); int ct = 0; int num = getId(i, j, dx, dy); adj[num].pb(num); FOR(x, i-dx*startMult, i+dx*(2-startMult)+1) { FOR(y, j-dy*startMult, j+dy*(2-startMult)+1) { if (ct==0) { if (seen.count(num)) return; seen.insert(num); ct++; } if (valid(x, y, !dx, !dy)) { adj[num].pb(getId(x, y, !dx, !dy)); } getCt(x, y); } } } int curW, curB; void assign(int u, int c = 0) { if (seen.count(u)) return; seen.insert(u); if (c == 0) curW++; else curB++; for (auto &v : adj[u]) { assign(v, !c); } } void getCt(int i, int j) { if (valid(i, j, 0, 1)) { process(i, j, 0, 1); } if (valid(i, j, 1, 0)) { process(i, j, 1, 0); } } int main() { cin >> n >> m; F0R(i, n) { F0R(j, m) { cin >> A[i][j]; } } int ans = 0; F0R(i, n) { F0R(j, m) { getCt(i, j); } } seen.clear(); for (auto x : adj) { curW = 0, curB = 0; assign(x.pA); ans += max(curW, curB); } cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...