Submission #99446

#TimeUsernameProblemLanguageResultExecution timeMemory
99446psmaoDango Maker (JOI18_dango_maker)C++14
13 / 100
59 ms48508 KiB
#include <bits/stdc++.h> using namespace std; #define fo(i,s,t) for(int i = s; i <= t; ++ i) #define fd(i,s,t) for(int i = s; i >= t; -- i) #define bf(i,s) for(int i = head[s]; i; i = e[i].next) #define mp make_pair #define fi first #define se second #define pii pair<int,int> #define pb push_back #define VI vector<int> #define sf scanf #define pf printf #define fp freopen #define SZ(x) ((int)(x).size()) #ifdef MPS #define D(x...) printf(x) #else #define D(x...) #endif typedef long long ll; typedef double db; typedef unsigned long long ull; const int inf = 1<<30; const ll INF = 1ll<<60; const db Inf = 1e20; const db eps = 1e-9; void gmax(int &a,int b){a = (a > b ? a : b);} void gmin(int &a,int b){a = (a < b ? a : b);} const int maxn = 1001; int n, m; bool b[maxn*maxn], seen[maxn*maxn]; int s0, s1; char a[maxn][maxn]; VI adj[maxn*maxn*2]; void link(int u, int v) {adj[u].pb(v); adj[v].pb(u);} bool color(int x, int c=0) { seen[x] = true; b[x] = c; if(c == 0) s0 ++; else s1 ++; for(auto p : adj[x]) if(seen[p] && b[p] == c) return false; else if(!seen[p] && !color(p, c^1)) return false; return true; } int p(int x, int y){return (x-1)*m+y;} int pp(int x, int y){return (x-1)*m+y+n*m;} int main() { #ifdef MPS fp("1.in","r",stdin); fp("1.out","w",stdout); #endif sf("%d%d",&n,&m); fo(i,1,n) sf("%s",a[i]+1); fo(i,1,n) fo(j,1,m) if(a[i][j] == 'R') { if(j+2 <= m && a[i][j+1] == 'G' && a[i][j+2] == 'W') { if(i>1 && i < n && a[i-1][j+1] == 'R' && a[i+1][j+1] == 'W') link(p(i,j), pp(i-1,j+1)); if(i>2 && a[i-2][j+2] == 'R' && a[i-1][j+2] == 'G') link(p(i,j), pp(i-2,j+2)); if(i <= n-2 && a[i+1][j] == 'G' && a[i+2][j] == 'W') link(p(i,j), pp(i,j)); } if(i+2 <= n && a[i+1][j] == 'G' && a[i+2][j] == 'W') { if(j>1 && j < m && a[i+1][j-1] == 'R' && a[i+1][j+1] == 'W') link(pp(i,j), p(i+1,j-1)); if(j>2 && a[i+2][j-2] == 'R' && a[i+2][j-1] == 'G') link(pp(i,j), p(i+2,j-2)); if(j <= m-2 && a[i][j+1] == 'G' && a[i][j+2] == 'W') link(pp(i,j), p(i,j)); } } int ans = 0; memset(seen,false,sizeof(seen)); fo(i,1,n) fo(j,1,m) if(a[i][j] == 'R') { if(j+2 <= m && a[i][j+1] == 'G' && a[i][j+2] == 'W') { int x = p(i,j); if(!seen[x]) { s0 = s1 = 0; assert(color(x)); ans += max(s0, s1); } } if(i+2 <= n && a[i+1][j] == 'G' && a[i+2][j] == 'W') { int x = pp(i,j); if(!seen[x]) { s0 = s1 = 0; assert(color(x)); ans += max(s0, s1); } } } pf("%d\n",ans); return 0; }

Compilation message (stderr)

dango_maker.cpp: In function 'int main()':
dango_maker.cpp:60:4: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  sf("%d%d",&n,&m);
    ^
dango_maker.cpp:61:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  fo(i,1,n) sf("%s",a[i]+1);
              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...