#include <bits/stdc++.h>
#define ll long long
#define ldb long double
#define endl '\n'
#define For(i,l,r) for(int i=l;i<=r;i++)
#define ForD(i,r,l) for(int i=r;i>=l;i--)
#define ff first
#define ss second
#define pb push_back
#define all(x) x.begin(),x.end()
#define sz(x) (signed)x.size()
#define unq(x) x.resize(unique(all(x))-x.begin())
#define F "TASK"
#define fio freopen(F".INP","r",stdin);freopen(F".OUT","w",stdout);
#ifdef NCGM
#include"debug.h"
#else 
#define debug(...) "fr";
#endif
using namespace std;
const int N=3003;
char c[N][N];
int n,m,mmb[N*2];
int dp[N][3][3];
inline bool down(int x,int y) {
    if (x+2>n || y>m) return 0;
    return (c[x][y]=='R'&&c[x+1][y]=='G'&&c[x+2][y]=='W');
}
inline bool right(int x,int y) {
    if (x>n || y+2>m) return 0;
    return (c[x][y]=='R'&&c[x][y+1]=='G'&&c[x][y+2]=='W');
}
int main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m;
    For(i,1,n) 
        For(j,1,m) cin >> c[i][j];
    For(i,1,n)
        For(j,1,m) mmb[i+j]=max(mmb[i+j],j);
    ll ans=0;
    For(i,2,n+m-2) {
        For(j,1,mmb[i]) 
            For(k,0,2)
                For(l,0,2) dp[j][k][l]=-1e9;
        
        dp[mmb[i]][0][0]=0;
        if(down(i-mmb[i],mmb[i])) dp[mmb[i]][2][0]=1;
        if (right(i-mmb[i],mmb[i])) dp[mmb[i]][0][0]=1; 
        ForD(j,mmb[i],2) 
            For(k,0,2)
                For(l,0,2) {
                    if (dp[j][k][l]<=-1e9) continue;
                    dp[j-1][0][max(k-1,0)]=max(dp[j-1][0][max(k-1,0)],dp[j][k][l]);
                    if (k==0 && l==0 && right(i-j+1,j-1)) dp[j-1][0][0]=max(dp[j-1][0][0],dp[j][k][l]+1);
                    if (down(i-j+1,j-1)) dp[j-1][2][max(k-1,0)]=max(dp[j-1][2][max(k-1,0)],dp[j][k][l]+1);
                }
        // if (i==5) debug(down(4,1),dp[mmb[i]][2][0]);
        
        int cur=0;
        For(i,0,2) 
            For(j,0,2) cur=max(cur,dp[1][i][j]);
        ans+=cur;
    }   
    cout << ans;
    return 0; 
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |