Submission #89219

#TimeUsernameProblemLanguageResultExecution timeMemory
89219sjhuang26Dango Maker (JOI18_dango_maker)C++14
100 / 100
678 ms138552 KiB
#include<iostream> #include<string> using namespace std; // N, M <= 3000 int N,M,d[3][3000],a[3000][3000]; bool fv[3000][3000]={},fh[3000][3000]={}; int main(){ cin>>N>>M; for(int i=0;i<N;++i){ string in;cin>>ws>>in; for(int j=0;j<M;++j){ if(in[j]=='R')a[i][j]=0; if(in[j]=='G')a[i][j]=1; if(in[j]=='W')a[i][j]=2; } } // vertical for(int i=0;i<N-2;++i){ for(int j=0;j<M;++j){ if(a[i][j]==0&&a[i+1][j]==1&&a[i+2][j]==2)fv[i][j]=1; } } // horizontal for(int i=0;i<N;++i){ for(int j=0;j<M-2;++j){ if(a[i][j]==0&&a[i][j+1]==1&&a[i][j+2]==2)fh[i][j]=1; } } int ans=0; for(int i=0;i<N;++i){ int j=i,k=0,m=0; while(j!=-1&&k!=M){ d[0][m]=d[1][m]=d[2][m]=0; if(m>0){ if(fh[j][k])d[0][m]=d[0][m-1]+1; else if(fv[j][k])d[0][m]=d[2][m-1]+1; d[0][m]=max(d[0][m],d[0][m-1]); }else{ d[0][m]=fh[j][k]||fv[j][k]; } if(m>0){ if(fv[j][k])d[1][m]=d[2][m-1]+1; d[1][m]=max(d[1][m],d[0][m-1]); }else{ d[1][m]=fv[j][k]; } if(m>0){ if(fv[j][k])d[2][m]=d[2][m-1]+1; d[2][m]=max(d[2][m],d[1][m-1]); }else{ d[2][m]=fv[j][k]; } --j;++k;++m; } ans+=d[0][m-1]; } // nearly duplicated code for(int i=1;i<M;++i){ int j=N-1,k=i,m=0; while(j!=-1&&k!=M){ d[0][m]=d[1][m]=d[2][m]=0; if(m>0){ if(fh[j][k])d[0][m]=d[0][m-1]+1; else if(fv[j][k])d[0][m]=d[2][m-1]+1; d[0][m]=max(d[0][m],d[0][m-1]); }else{ d[0][m]=fh[j][k]||fv[j][k]; } if(m>0){ if(fv[j][k])d[1][m]=d[2][m-1]+1; d[1][m]=max(d[1][m],d[0][m-1]); }else{ d[1][m]=fv[j][k]; } if(m>0){ if(fv[j][k])d[2][m]=d[2][m-1]+1; d[2][m]=max(d[2][m],d[1][m-1]); }else{ d[2][m]=fv[j][k]; } --j;++k;++m; } ans+=d[0][m-1]; } cout<<ans<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...