답안 #610895

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
610895 2022-07-28T17:21:07 Z Urvuk3 Dango Maker (JOI18_dango_maker) C++17
0 / 100
176 ms 262144 KB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
ll INF=1e9,LINF=1e18,MOD=1e9+7; const ll MAXN=3e3+1,MAXS=2*3e3+1;
#define fi first
#define se second
#define pii pair<int,int>
#define mid ((l+r)/2)
#define sz(a) (int((a).size()))
#define all(a) a.begin(),a.end()
#define endl "\n"
#define PRINT(x) cerr<<#x<<'-'<<x<<endl<<flush;
#define pb push_back
#define PRINTvec(x) { cerr<<#x<<"-"; for(auto i_:x) cerr<<i_<<" "; cerr<<endl; }

vector<vector<vector<int>>> dp(MAXN+1,vector<vector<int>>(2,vector<int>(2)));
vector<vector<vector<bool>>> start(MAXS+1,vector<vector<bool>>(MAXN+1,(vector<bool>(2))));

void Solve(){
    int N,M; cin>>N>>M;
    vector<vector<char>> a(N+3,vector<char>(M+3,'@'));
    for(int i=1;i<=N;i++){
        string s; cin>>s;
        for(int j=1;j<=M;j++){
            a[i][j]=s[j-1];
        }
    }

    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if(a[i][j]=='R' && a[i+1][j]=='G' && a[i+2][j]=='W') start[i+j][i][1]=true;
            if(a[i][j]=='R' && a[i][j+1]=='G' && a[i][j+2]=='W') start[i+j][i][0]=true;
        }
    }

    function<void(int&,int)> Smax=[&](int& a,int b){
        a=max(a,b);
    };

    function<void()> Build=[&](){
        for(int i=1;i<=N;i++){
            for(int j=0;j<2;j++){
                for(int k=0;k<2;k++){
                    dp[i][j][k]=-INF;
                }
            }
        }
    };

    int res=0;
    for(int z=2;z<=N+M;z++){
        Build();
        dp[0][0][0]=0;
        for(int i=1;i<=N;i++){
            for(int x=0;x<2;x++){
                for(int y=0;y<2;y++){
                    Smax(dp[i][0][x],dp[i-1][x][y]);
                    if(start[z][i][0] && x==0 && y==0) Smax(dp[i][0][x],dp[i-1][x][y]+1);
                    if(start[z][i][1]) Smax(dp[i][1][x],dp[i-1][x][y]+1);
                }
            }
        }
        int tmp=0;
        for(int i=0;i<2;i++){
            for(int j=0;j<2;j++){
                tmp=max(tmp,dp[N][i][j]);
            }
        }
        res+=tmp;
    }
    cout<<res<<endl;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t; t=1;
    //cin>>t;
    while(t--){
        Solve();
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 176 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 176 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 176 ms 262144 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -