Submission #207379

#TimeUsernameProblemLanguageResultExecution timeMemory
207379SaboonDango Maker (JOI18_dango_maker)C++14
100 / 100
161 ms89696 KiB
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
 
const int maxn = 3000 + 10;
const int inf = 1e9;
 
string s[maxn];
int dp[maxn][maxn][2];

int main(){
	ios_base::sync_with_stdio(false);
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> s[i];
	int answer = 0;
	for (int i = 0; i < n; i++){
		for (int j = 0; j < m; j++){
			if (s[i][j] != 'G')
				continue;
			int can = 0;
			if (i > 0 and i < n - 1 and s[i - 1][j] == 'R' and s[i + 1][j] == 'W')
				can |= 1;
			if (j > 0 and j < m - 1 and s[i][j - 1] == 'R' and s[i][j + 1] == 'W')
				can |= 2;
			if (i > 0 and j < m - 1)
				dp[i][j][0] = dp[i][j][1] = max(dp[i-1][j+1][0], dp[i-1][j+1][1]);
			if (can & 1){
				int t = ((i > 0 and j < m - 1) ? dp[i-1][j+1][0] : 0);
				dp[i][j][0] = max(dp[i][j][0], t + 1);
			}
			if (can & 2){
				int t = ((i > 0 and j < m - 1) ? dp[i-1][j+1][1] : 0);
				dp[i][j][1] = max(dp[i][j][1], t + 1);
			}
			if (i == n - 1 or j == 0 or s[i+1][j-1] != 'G')
				answer += max(dp[i][j][0], dp[i][j][1]);
		}
	}
	cout << answer << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...