Submission #542889

#TimeUsernameProblemLanguageResultExecution timeMemory
542889Aldas25Dango Maker (JOI18_dango_maker)C++14
13 / 100
1 ms340 KiB
/* //#pragma GCC target ("avx2") #pragma GCC optimize ("O3") #pragma GCC optimize ("unroll-loops") */ #include <bits/stdc++.h> using namespace std; #define FAST_IO ios_base::sync_with_stdio(0); cin.tie(nullptr) #define FOR(i, a, b) for(int i = (a); i <= (b); i++) #define REP(n) FOR(O, 1, (n)) #define pb push_back #define f first #define s second typedef long double ld; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MAXN = 500100, MAXK = 20; const ll INF = 1e16; //const ll MOD = 1e9+7; //const ll MOD = 998244353; void setIO() { FAST_IO; } void setIO(string s) { FAST_IO; freopen((s+".in").c_str(), "r", stdin); freopen((s+".out").c_str(), "w", stdout); } int par[3100*3100]; int cnt[3100*3100][3]; int find (int a) {return par[a] = par[a]==a ? a : find(par[a]);} bool same (int a, int b) { return find (a) == find(b); } void unite (int a, int b) { a = find(a); b = find(b); if (a == b) return; par[b] = a; FOR(i, 0, 2) cnt[a][i] += cnt[b][i]; } int n, m; char grid[3100][3100]; int id (int i, int j) { return i * m + j; } int main() { setIO(); cin >> n >> m; FOR(i, 0, n-1) FOR(j, 0, m-1) cin >> grid[i][j]; FOR(i, 0, n-1) FOR(j, 0, m-1) { int ind = id(i,j); par[ind] = ind; int c = (grid[i][j]=='R') ? 0 : ((grid[i][j]=='G') ? 1 : 2); cnt[ind][c]++; } FOR(i, 0, n-1) FOR(j, 0, m-1) { if (i+2 <= n-1) { if (grid[i][j] == 'R' && grid[i+1][j] == 'G' && grid[i+2][j] == 'W') { unite(id(i,j), id(i+1, j)); unite(id(i,j), id(i+2, j)); } } if (j+2 <= m-1) { if (grid[i][j] == 'R' && grid[i][j+1] == 'G' && grid[i][j+2] == 'W') { unite(id(i,j), id(i, j+1)); unite(id(i,j), id(i, j+2)); } } } int ans = 0; FOR(i, 0, n-1) FOR(j, 0, m-1) { int ind = id (i,j); if (find(ind) != ind) continue; //cout << " i = " << i << " j = " << j; int cur = min(cnt[ind][1], cnt[ind][0]); cur = min(cur, cnt[ind][2]); ans += cur; //cout << " cur = " << cur << endl; //FOR(c, 0, 2) cout << " cnt c =" << c << " cnt=" << cnt[ind][c] << endl; } cout << ans << "\n"; return 0; }

Compilation message (stderr)

dango_maker.cpp: In function 'void setIO(std::string)':
dango_maker.cpp:37:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |     freopen((s+".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dango_maker.cpp:38:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   38 |     freopen((s+".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...