Submission #898115

#TimeUsernameProblemLanguageResultExecution timeMemory
898115andrei_iorgulescuDango Maker (JOI18_dango_maker)C++14
100 / 100
243 ms68176 KiB
#include <bits/stdc++.h>

using namespace std;

int n,m;
char a[3005][3005];
int dp[3005][3];
vector<int>v[6005];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            cin >> a[i][j],v[i + j].push_back(i);
    int ans = 0;
    for (int d = 2; d <= n + m; d++)
    {
        for (int i = 0; i < v[d].size(); i++)
        {
            dp[i][0] = dp[i][1] = dp[i][2] = 0;
            if (i == 0)
            {
                int l = v[d][i],c = d - l;
                if (c - 1 > 0 and c + 1 <= m and a[l][c - 1] == 'R' and a[l][c] == 'G' and a[l][c + 1] == 'W')
                    dp[i][1] = 1;
                if (l - 1 > 0 and l + 1 <= n and a[l - 1][c] == 'R' and a[l][c] == 'G' and a[l + 1][c] == 'W')
                    dp[i][2] = 1;
            }
            else
            {
                int l = v[d][i],c = d - l;
                dp[i][0] = max(dp[i - 1][0],max(dp[i - 1][1],dp[i - 1][2]));
                ///var 0: nu pun centrat in (l,c)
                ///var 1: pun orizontal centrat in (l,c)
                ///var 2: pun vertical centrat in (l,c)
                if (c - 1 > 0 and c + 1 <= m and a[l][c - 1] == 'R' and a[l][c] == 'G' and a[l][c + 1] == 'W')
                    dp[i][1] = max(dp[i - 1][0],dp[i - 1][1]) + 1;
                if (l - 1 > 0 and l + 1 <= n and a[l - 1][c] == 'R' and a[l][c] == 'G' and a[l + 1][c] == 'W')
                    dp[i][2] = max(dp[i - 1][0],dp[i - 1][2]) + 1;
            }
        }
        int sz = v[d].size() - 1;
        //cout << d << ' ' << max(dp[sz][0],max(dp[sz][1],dp[sz][2])) << endl;
        ans += max(dp[sz][0],max(dp[sz][1],dp[sz][2]));
    }
    cout << ans;
    return 0;
}
/*
4 3
WRW
RGW
GWW
WWW
*/

Compilation message (stderr)

dango_maker.cpp: In function 'int main()':
dango_maker.cpp:22:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |         for (int i = 0; i < v[d].size(); i++)
      |                         ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...