Submission #209371

#TimeUsernameProblemLanguageResultExecution timeMemory
209371kshitij_sodaniDango Maker (JOI18_dango_maker)C++17
0 / 100
146 ms262148 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; #define mp make_pair #define pb push_back typedef long long int llo; #define a first #define b second #define endl "\n" //vector<pair<pair<llo,llo>,llo>> adj[3001][3001][2]; //llo vis[3001][3001][2]; llo dp[3001][3001][2][2];//1 take 0 not take llo it[3001][3001]; llo n,m; void dfs(llo i,llo j,llo kk){ dp[i][j][kk][0]=0; dp[i][j][kk][1]=0; if(kk==0){ if(it[i][j]==0 and it[i+1][j]==1 and it[i+2][j]==2){ dp[i][j][kk][1]=1; if(j<m-2 ){ if(dp[i][j][1-kk][0]==-1){ dfs(i,j,1-kk); dp[i][j][kk][1]+=dp[i][j][1-kk][0]; dp[i][j][kk][0]+=dp[i][j][1-kk][1]; } } if(j<m-1 and j>0){ if(dp[i+1][j-1][1-kk][0]==-1){ dfs(i+1,j-1,1-kk); dp[i][j][kk][1]+=dp[i+1][j-1][1-kk][0]; dp[i][j][kk][0]+=dp[i+1][j-1][1-kk][1]; } } if(j>1){ if(dp[i+2][j-2][1-kk][0]==-1){ dfs(i+2,j-2,1-kk); dp[i][j][kk][1]+=dp[i+2][j-2][1-kk][0]; dp[i][j][kk][0]+=dp[i+2][j-2][1-kk][1]; } } } } if(kk==1){ if(it[i][j]==0 and it[i][j+1]==1 and it[i][j+2]==2){ dp[i][j][kk][1]=1; //cout<<i<<" "<<j<<" "<<0<<endl; if(i<n-2){ if(dp[i][j][1-kk][0]==-1){ dfs(i,j,1-kk); dp[i][j][kk][1]+=dp[i][j][1-kk][0]; dp[i][j][kk][0]+=dp[i][j][1-kk][1]; } } if(i<n-1 and i>0){ if(dp[i-1][j+1][1-kk][0]==-1){ dfs(i-1,j+1,1-kk); dp[i][j][kk][1]+=dp[i-1][j+1][1-kk][0]; dp[i][j][kk][0]+=dp[i-1][j+1][1-kk][1]; } } if(i>1){ if(dp[i-2][j+2][1-kk][0]==-1){ dfs(i-2,j+2,1-kk); dp[i][j][kk][1]+=dp[i-2][j+2][1-kk][0]; dp[i][j][kk][0]+=dp[i-2][j+2][1-kk][1]; } } } } dp[i][j][kk][1]=max(dp[i][j][kk][1],dp[i][j][kk][0]); } int main(){ ios_base::sync_with_stdio(false); // memset(vis,1,sizeof(vis)); cin.tie(NULL); memset(dp,-1,sizeof(dp)); char s; cin>>n>>m; //llo it[n][m]; for(llo i=0;i<n;i++){ for(llo j=0;j<m;j++){ cin>>s; if(s=='R'){ it[i][j]=0; } else if(s=='G'){ it[i][j]=1; } else{ it[i][j]=2; } // cout<<it[i][j]<<" "; } // cout<<endl; } /* llo st=0; for(llo i=0;i<n;i++){ for(llo j=0;j<m-2;j++){ if(it[i][j]==0 and it[i][j+1]==1 and it[i][j+2]==2){ vis[i][j][1]=0; // cout<<i<<" "<<j<<" "<<1<<endl; } } }*/ /* for(llo i=0;i<n-2;i++){ for(llo j=0;j<m;j++){ if(it[i][j]==0 and it[i+1][j]==1 and it[i+2][j]==2){ vis[i][j][0]=0; //cout<<i<<" "<<j<<" "<<0<<endl; if(j<m-2){ if(it[i][j+1]==1 and it[i][j+2]==2){ adj[i][j][0].pb(mp(mp(i,j),1)); adj[i][j][1].pb(mp(mp(i,j),0)); } } if(j<m-1 and j>0){ if(it[i+1][j-1]==0 and it[i+1][j+1]==2){ adj[i][j][0].pb(mp(mp(i+1,j-1),1)); adj[i+1][j-1][1].pb(mp(mp(i,j),0)); } } if(j>1){ if(it[i+2][j-2]==0 and it[i+2][j-1]==1){ adj[i][j][0].pb(mp(mp(i+2,j-2),1)); adj[i+2][j-2][1].pb(mp(mp(i,j),0)); } } } } }*/ llo ans=0; for(llo ii=0;ii<n;ii++){ for(llo jj=0;jj<m;jj++){ if(dp[ii][jj][0][0]==-1 and ii<n-2){ dfs(ii,jj,0); ans+=dp[ii][jj][0][1]; } if(dp[ii][jj][1][0]==-1 and jj<m-2){ dfs(ii,jj,1); ans+=dp[ii][jj][1][1]; } } } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...