Submission #1284620

#TimeUsernameProblemLanguageResultExecution timeMemory
1284620Jawad_Akbar_JJDango Maker (JOI18_dango_maker)C++20
100 / 100
385 ms9632 KiB
#include <iostream> using namespace std; const int N = 3050; char a[N][N]; int n, m, dp[N][3], Ans; int poss(int i, int j, int tp){ if (tp == 0) return 0; int i1, i2, j1, j2; if (tp == 1) i1 = i - 1, i2 = i + 1, j1 = j2 = j; else i1 = i2 = i, j1 = j - 1, j2 = j + 1; if (i1 < 1 or j1 < 1 or i2 > n or j2 > m) return 0; if (i1 == i2) return (a[i1][j1] == 'R' and a[i1][j1+1] == 'G' and a[i1][j1+2] == 'W'); return (a[i1][j1] == 'R' and a[i1+1][j1] == 'G' and a[i1+2][j1] == 'W'); } void solve(int i, int j){ if (i > n or j < 1 or a[i][j] != 'G'){ Ans += max(dp[i-1][0], max(dp[i-1][1], dp[i-1][2])); return; } dp[i][0] = max(dp[i-1][1], max(dp[i-1][0], dp[i-1][2])); dp[i][1] = max(dp[i-1][1], dp[i-1][0]) + poss(i, j, 1); dp[i][2] = max(dp[i-1][2], dp[i-1][0]) + poss(i, j, 2); solve(i+1, j-1); dp[i][0] = dp[i][1] = dp[i][2] = 0; } int main(){ cin>>n>>m; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++) cin>>a[i][j]; } for (int i=1;i<=n;i++){ for (int j=m;j>=1;j--){ if (a[i][j] != 'G' or (i > 1 and j < m and a[i-1][j+1] == 'G')) continue; solve(i, j); } } cout<<Ans<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...