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...