Submission #332537

#TimeUsernameProblemLanguageResultExecution timeMemory
332537limabeansDango Maker (JOI18_dango_maker)C++17
100 / 100
896 ms147308 KiB
#include <bits/stdc++.h> using namespace std; template<typename T> void out(T x) { cout << x << endl; exit(0); } #define watch(x) cout << (#x) << " is " << (x) << endl const int maxn = 3002; int n, m; string g[maxn]; //RGW bool can[maxn][maxn][4]; vector<pair<int,int>> diag[maxn+maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for (int i=0; i<n; i++) { cin>>g[i]; } // mark centers for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { //vertical if (i>0 && i+1<n) { if (g[i-1][j]=='R' && g[i][j]=='G' && g[i+1][j]=='W') { can[i][j][1]=true; } } //horizontal if (j>0 && j+1<m) { if (g[i][j-1]=='R' && g[i][j]=='G' && g[i][j+1]=='W') { can[i][j][2]=true; } } } } for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { diag[i+j].push_back({i,j}); } } int res = 0; for (int d=0; d<n+m; d++) { int len = diag[d].size(); vector<vector<int>> dp(len+1, vector<int>(3, 0)); //0: none, 1: vert, 2: horiz for (int i=1; i<=len; i++) { int x = diag[d][i-1].first; int y = diag[d][i-1].second; dp[i][0] = max({dp[i-1][0], dp[i-1][1], dp[i-1][2]}); for (int op=1; op<=2; op++) { if (can[x][y][op]) { dp[i][op] = max({dp[i][op], 1+dp[i-1][0], 1+dp[i-1][op]}); // vert only compatibile with vert along the diagonal } } } res += max({dp[len][0],dp[len][1],dp[len][2]}); } cout<<res<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...