제출 #211405

#제출 시각아이디문제언어결과실행 시간메모리
211405shart23Dango Maker (JOI18_dango_maker)C++14
13 / 100
5 ms896 KiB
#include <bits/stdc++.h> #define endl "\n" using namespace std; const int MAXN = 100; vector<int> vin[MAXN][MAXN]; vector<int> g[MAXN * MAXN]; int used[MAXN * MAXN]; //int nn[MAXN * MAXN]; //int sm[MAXN * MAXN]; //set<int> g2[MAXN * MAXN]; pair<int, int> dp[MAXN * MAXN]; void dfs3(int v, int p) { used[v] = 3; dp[v].first = 1; for (int u : g[v]) { if (u != p && used[u] != 3) { dfs3(u, v); dp[v].first += dp[u].second; dp[v].second += max(dp[u].first, dp[u].second); } } } bool is_edge(int v, int u, int p) { for (auto x : g[v]) { if (x == u && x != p) { return true; } } return false; } bool check(int v) { for (int i = 0; i < g[v].size(); i++) { for (int j = i + 1; j < g[v].size(); j++) { for (int u : g[g[v][i]]) { if (is_edge(g[v][j], u, v)) { return true; } } } } return false; } void dfs(int v, vector<int> &comp) { comp.push_back(v); used[v] = 1; for (int u : g[v]) { if (!used[u]) { dfs(u, comp); } } } //void dfs2(int v, set<int> &in_c, int num) { // used[v] = 2; // nn[v] = num; // if (in_c.find(v) == in_c.end()) { // return; // } // for (int u : g[v]) { // if (used[u] != 2 && in_c.find(u) != in_c.end()) { // dfs2(u, in_c, num); // } // } //} int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, m; cin >> n >> m; vector<string> arr(n); for (auto &x : arr) { cin >> x; } int cnt = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i <= n - 3) { if (arr[i][j] == 'R' && arr[i + 1][j] == 'G' && arr[i + 2][j] == 'W') { vin[i][j].push_back(cnt); vin[i + 1][j].push_back(cnt); vin[i + 2][j].push_back(cnt); cnt++; } } if (j <= m - 3) { if (arr[i][j] == 'R' && arr[i][j + 1] == 'G' && arr[i][j + 2] == 'W') { vin[i][j].push_back(cnt); vin[i][j + 1].push_back(cnt); vin[i][j + 2].push_back(cnt); cnt++; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { for (auto v : vin[i][j]) { for (auto u : vin[i][j]) { if (v != u) { g[v].push_back(u); } } } } } int res = 0; for (int i = 0; i < cnt; i++) { if (used[i] != 3) { dfs3(i, -1); res += max(dp[i].first, dp[i].second); } } cout << res << endl; // int cnt2 = 0; // for (int i = 0; i < cnt; i++) { // if (!used[i]) { // vector<int> comp; // dfs(i, comp); // set<int> in_c; // for (auto x : comp) { // if (check(x)) { // in_c.insert(x); // } // } // for (auto x : comp) { // if (used[x] != 2) { // dfs2(x, in_c, cnt2); // cnt2++; // } // } // } // } // for (int i = 0; i < cnt; i++) { // sm[nn[i]]++; // for (int u : g[i]) { // if (nn[u] != nn[i]) { // g2[nn[i]].insert(nn[u]); // } // } // } // int res = 0; // for (int i = 0; i < cnt2; i++) { // if (used[i] != 3) { // dfs3(i, -1); // res += max(dp[i].first, dp[i].second); // } // } // cout << res << endl; } /* 6 6 WWGWGG GRRWRW WGWRGG GGRGWR WRGWRG RGWWGG */

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

dango_maker.cpp: In function 'bool check(int)':
dango_maker.cpp:38:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < g[v].size(); i++) {
                     ~~^~~~~~~~~~~~~
dango_maker.cpp:39:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = i + 1; j < g[v].size(); j++) {
                             ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...