Submission #96390

#TimeUsernameProblemLanguageResultExecution timeMemory
96390hugo_pmDango Maker (JOI18_dango_maker)C++14
100 / 100
944 ms248176 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define form2(i, a, b) for (int i = (a); i < (b); ++i)
#define ford2(i, a, b) for (int i = (a-1); i >= b; --i)
#define form(i, n) form2(i, 0, n)
#define ford(i, n) ford2(i, n, 0)

#define chmax(x, v) x = max(x, (v))
#define chmin(x, v) x = min(x, (v))
#define fi first
#define se second

const long long BIG = 1000000000000000000LL;

typedef long long ll;
typedef long double ld;

void cpr(string s, vector<int> v)
{ int i = 0; for (char c : s) { if (c == '$') cout << v[i++]; else cout << c; } cout << '\n'; }

void cpr(string s) { cpr(s, {}); }

void solve();
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	solve();
	return 0;
}

const int borne = 3005;
int nblig, nbcol;
char grille[borne][borne];
bool rdy[2][borne][borne];
int dp[borne][borne][3];

void tt(int lig, int col)
{
	if (lig > 0 && lig+1 < nblig) {
		if (grille[lig-1][col] == 'R' && grille[lig][col] == 'G' && grille[lig+1][col] == 'W') {
			rdy[0][lig][col] = true;
		}
	}
	if (col > 0 && col+1 < nbcol) {
		if (grille[lig][col-1] == 'R' && grille[lig][col] == 'G' && grille[lig][col+1] == 'W') {
			rdy[1][lig][col] = true;
		}
	}
}

int gdp(int lig, int col, int mode)
{
	int &rep = dp[lig][col][mode];
	if (rep != -1) return rep;
	rep = 0;
	if (lig >= nblig || col < 0) return rep;
	if (mode == 0 || mode == 2) {
		if (rdy[0][lig][col]) {
			chmax(rep, 1+gdp(lig+1,col-1,0));
		}
	}
	if (mode == 1 || mode == 2) {
		if (rdy[1][lig][col]) {
			chmax(rep, 1+gdp(lig+1,col-1,1));
		}
	}
	chmax(rep, gdp(lig+1,col-1,2));
	return rep;
}

void solve()
{
	fill_n(&dp[0][0][0], borne*borne*3, -1);
	cin >> nblig >> nbcol;
	form(i, nblig) form(j, nbcol) {
		cin >> grille[i][j];
	}
	form(i, nblig) form(j, nbcol) {
		tt(i,j);
	}
	int tot = 0;
	tot += gdp(0, nbcol-1, 2);
	form(colini, nbcol-1) tot += gdp(0, colini, 2);
	form2(ligini, 1, nblig) tot += gdp(ligini, nbcol-1, 2);
	cout << tot << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...