Submission #610892

#TimeUsernameProblemLanguageResultExecution timeMemory
610892Urvuk3Dango Maker (JOI18_dango_maker)C++17
33 / 100
222 ms262144 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long ll INF=1e9,LINF=1e18,MOD=1e9+7; const ll MAXN=1e3+1,MAXS=2*MAXN; #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; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...