Submission #785244

#TimeUsernameProblemLanguageResultExecution timeMemory
785244stefanneaguDango Maker (JOI18_dango_maker)C++17
100 / 100
800 ms194512 KiB
#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; const int nmax = 3007; char mat[nmax][nmax]; int jos[nmax][nmax], dr[nmax][nmax], dp[nmax][nmax][3]; int32_t main() { int n, m, ans = 0; cin >> n >> m; for(int i = 1; i <= n; i ++) { for(int j = 1; j <= m; j ++) { cin >> mat[i][j]; } } for(int i = 1; i <= n; i ++) { for(int j = 1; j <= m; j ++) { if(mat[i][j - 1] == 'R' && mat[i][j] == 'G' && mat[i][j + 1] == 'W') { dr[i][j] = 1; } if(mat[i - 1][j] == 'R' && mat[i][j] == 'G' && mat[i + 1][j] == 'W') { jos[i][j] = 1; } } } int l = 1, c = 1, x = n + m; while(x > 1) { int i = l, j = c; dp[i][j][0] = 0; dp[i][j][1] = dr[i][j]; dp[i][j][2] = jos[i][j]; i --; j ++; while(j <= m && i > 0) { for(int d = 0; d <= 2; d ++) { dp[i][j][0] = max(dp[i][j][0], dp[i + 1][j - 1][d]); } dp[i][j][1] = max(dp[i + 1][j - 1][1], dp[i + 1][j - 1][0]) + dr[i][j]; dp[i][j][2] = max(dp[i + 1][j - 1][2], dp[i + 1][j - 1][0]) + jos[i][j]; i --; j ++; } i ++; j --; ans = ans + max({dp[i][j][1], dp[i][j][2], dp[i][j][0]}); l ++; if(l > n) { l = n; c ++; } x --; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...