This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define maxn 500009
using namespace std;
string s[3009];
bool A[3009][3009];
bool B[3009][3009];
int ans;
int dp[6009][3];
main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> s[i];
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(j + 2 < m && s[i][j] == 'R'
&& s[i][j+1] == 'G'
&& s[i][j+2] == 'W')
A[i][j] = 1;
if(i + 2 < n && s[i][j] == 'R'
&& s[i+1][j] == 'G'
&& s[i+2][j] == 'W')
B[i][j] = 1;
}
}
for(int ipj = 0; ipj < n+m-1; ipj++){
vector<int> a, b;
for(int i = 0; i < 3; i++)
a.push_back(0), b.push_back(0);
for(int i = n - 1; i >= 0; i--){
int j = ipj - i;
if(j < 0 || j >= m) continue;
a.push_back(A[i][j]);
b.push_back(B[i][j]);
}
int N = a.size();
for(int i = 3; i < N; i++){
dp[i][0] = max(dp[i-1][0], max(dp[i-1][1], dp[i-1][2]));
if(a[i]) dp[i][1] = dp[i][0] + 1;
else dp[i][1] = 0;
if(b[i]) dp[i][2] = max(dp[i-1][2] + 1,
max(dp[i-2][0],dp[i-2][2]) + 1);
else dp[i][2] = 0;
}
ans += max(dp[N - 1][0], max(dp[N - 1][1], dp[N - 1][2]) );
}
cout << ans << endl;
}
Compilation message (stderr)
dango_maker.cpp:9:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
main(){
^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |