Submission #1144850

#TimeUsernameProblemLanguageResultExecution timeMemory
1144850nuutsnoyntonDango Maker (JOI18_dango_maker)C++20
100 / 100
303 ms59284 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = int;
using pll = pair< ll, ll >;
ll a[6005][6005], dp[12002][3] = {0};
int main() {
	ll n, m, r, x, hvt_cnt, bos_cnt, y, i, j, ans, t;

	cin >> n >> m;
	
	string str[n + 2];
	
	for (i = 1; i <= n; i ++) {
		cin >> str[i];
		for (j = 0; j < m; j ++) {
			if ( str[i][j] == 'R') a[i][j + 1] = 1;
			if ( str[i][j] == 'G') a[i][j + 1] = 2;
			if ( str[i][j] == 'W') a[i][j + 1] = 3;
		}
		
	}
	ans = 0;
	for (i = 2; i <= n + m; i ++) {
		x = i - 1;
		y = 1;
		r =1;
		dp[r][0] = dp[r][1] = dp[r][2] = 0;
		if ( a[x][y - 1] == 1 && a[x][y] == 2 && a[x][y + 1] == 3) dp[r][1] = 1;
		if ( a[x - 1][y] == 1 && a[x][y] == 2 && a[x + 1][y] == 3) dp[r][2] = 1;
		x --;
		y ++;	
		r ++;	
		while ( x >= 1 && y <= m) {
			dp[r][0] = dp[r][1] = dp[r][2] =  max({dp[r - 1][0], dp[r - 1][1], dp[r - 1][2]});
			
			if ( a[x][y - 1] == 1 && a[x][y] == 2 && a[x][y + 1] == 3) dp[r][1] = max(dp[r][1], max(dp[r - 1][1], dp[r- 1][0]) + 1);
			if ( a[x - 1][y] == 1 && a[x][y] == 2 && a[x + 1][y] == 3) dp[r][2] = max(dp[r][2], max(dp[r - 1][2], dp[r- 1][0]) + 1);
			x --;
			y ++;
			r ++;
		}
		r --;
		ans += max({dp[r][0], dp[r][1], dp[r][2]});
	}
	cout << ans << endl;
	
	
	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...