제출 #43541

#제출 시각아이디문제언어결과실행 시간메모리
43541wxh010910Dango Maker (JOI18_dango_maker)C++14
100 / 100
314 ms121236 KiB
#include <bits/stdc++.h>

using namespace std;

#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define Debug(...) fprintf(stderr, __VA_ARGS__)

typedef long long LL;
typedef long double LD;
typedef unsigned int uint;
typedef pair <int, int> pii;
typedef unsigned long long uLL;

template <typename T> inline void Read(T &x) {
  char c = getchar();
  bool f = false;
  for (x = 0; !isdigit(c); c = getchar()) {
    if (c == '-') {
      f = true;
    }
  }
  for (; isdigit(c); c = getchar()) {
    x = x * 10 + c - '0';
  }
  if (f) {
    x = -x;
  }
}

template <typename T> inline bool CheckMax(T &a, const T &b) {
  return a < b ? a = b, true : false;
}

template <typename T> inline bool CheckMin(T &a, const T &b) {
  return a > b ? a = b, true : false;
}

const int N = 3005;

int n, m, ans, f[N][3], g[N][N];
char s[N][N];

int main() {
#ifdef wxh010910
  freopen("d.in", "r", stdin);
#endif
  Read(n), Read(m);
  for (int i = 1; i <= n; ++i) {
    scanf("%s", s[i] + 1);
  }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (s[i - 1][j] == 'R' && s[i][j] == 'G' && s[i + 1][j] == 'W') {
        g[i][j] |= 1;
      }
      if (s[i][j - 1] == 'R' && s[i][j] == 'G' && s[i][j + 1] == 'W') {
        g[i][j] |= 2;
      }
    }
  }
  for (int s = 2; s <= n + m; ++s) {
    for (int i = max(1, s - m), j = s - i; i <= min(n, s - 1); ++i, --j) {
      if (i == max(1, s - m)) {
        f[i][0] = 0, f[i][1] = g[i][j] & 1, f[i][2] = g[i][j] >> 1 & 1;
      } else {
        f[i][0] = max(f[i - 1][0], max(f[i - 1][1], f[i - 1][2])), f[i][1] = f[i][2] = 0;
        if (g[i][j] & 1) {
          f[i][1] = max(f[i - 1][0], f[i - 1][1]) + 1;
        }
        if (g[i][j] & 2) {
          f[i][2] = max(f[i - 1][0], f[i - 1][2]) + 1;
        }
      }
    }
    ans += max(f[min(n, s - 1)][0], max(f[min(n, s - 1)][1], f[min(n, s - 1)][2]));
  }
  printf("%d\n", ans);
#ifdef wxh010910
  Debug("My Time: %.3lfms\n", (double)clock() / CLOCKS_PER_SEC);
#endif
  return 0;
}

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

dango_maker.cpp: In function 'int main()':
dango_maker.cpp:52:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%s", s[i] + 1);
                          ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...