Submission #722026

#TimeUsernameProblemLanguageResultExecution timeMemory
722026dozerDango Maker (JOI18_dango_maker)C++14
100 / 100
504 ms252748 KiB
#include <bits/stdc++.h> using namespace std; #define sp " " #define endl "\n"; #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define pb push_back #define pii pair<int, int> #define st first #define nd second #define N 3005 const int modulo = 1e9 + 7; char arr[N][N]; int dp[N * 2][N][2][2]; int ho[N][N], ver[N][N]; int32_t main() { fastio(); int n, m; cin>>n>>m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin>>arr[i][j]; } } for (int i = 1; i <= n; i++) for (int j = 1; j <= m - 2; j++) if (arr[i][j] == 'R' && arr[i][j + 1] == 'G' && arr[i][j + 2] == 'W') ho[i][j] = 1; for (int i = 1; i <= n - 2; i++) for (int j = 1; j <= m; j++) if (arr[i][j] == 'R' && arr[i + 1][j] == 'G' && arr[i + 2][j] == 'W') ver[i][j] = 1; int ans = 0; for (int i = 1; i <= n + m; i++) { int lw = max((int)1, i - n); int up = min(i - 1, m); for (int j = up; j >= lw; j--) { for (int k = 0; k < 2; k++) { for (int l = 0; l < 2; l++) { int t1 = dp[i][j + 1][0][k], t2 = 0, t3 = 0; if (ho[i - j][j]) t2 = dp[i][j + 1][1][k] + 1; if (ver[i - j][j] && (k | l) == 0) t3 = dp[i][j + 1][0][k] + 1; dp[i][j][k][l] = max(t1, max(t2, t3)); } } } //cout<<i<<sp<<lw<<sp<<up<<" :"<<dp[i][lw][0][0]<<endl; ans += dp[i][lw][0][0]; } cout<<ans<<endl; cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " seconds\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...