제출 #229513

#제출 시각아이디문제언어결과실행 시간메모리
229513hanagasumiDango Maker (JOI18_dango_maker)C++17
100 / 100
863 ms21096 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <deque>
#include <map>
#include <set>
#include <complex>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <random>

#define ft first
#define sc second
#define pb push_back
#define len(v) (int)v.size()
// #define int ll

using namespace std;
typedef long long ll;

signed main() {
	#ifdef PC
		freopen("in.txt", "r", stdin);
		freopen("out.txt", "w", stdout);
	#endif
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n, m, cnt = 0, ans = 0;
	cin >> n >> m;
	vector<vector<char>> mat(n, vector<char> (m));
	vector<vector<bool>> hor(n, vector<bool> (m, 0));
	vector<vector<bool>> ver(n, vector<bool> (m, 0));
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> mat[i][j];
		}
	}
	for (int i = 0; i < n - 2; i++) {
		for (int j = 0; j < m; j++) {
			if(!(mat[i][j] == 'R' && mat[i + 1][j] == 'G' && mat[i + 2][j] == 'W'))
				continue;
			ver[i][j] = 1;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m - 2; j++) {
			if(!(mat[i][j] == 'R' && mat[i][j + 1] == 'G' && mat[i][j + 2] == 'W'))
				continue;
			hor[i][j] = 1;
		}
	}

	for (int nn = 0; nn < n + m; nn++) {
		int i1, j1;
		if(nn < n) {
			i1 = nn, j1 = 0;
		}
		else {
			i1 = n - 1, j1 = nn - i1;
		}
		vector<pair<int, int>> now;
		while(i1 >= 0 && j1 < m) {
			// cout << "(" << i1 << ", " << j1 << ") ";
			now.pb({ver[i1][j1], hor[i1][j1]});
			i1--, j1++;
		}
		// cout << endl;
		reverse(now.begin(), now.end());
		int nr = len(now);
		vector<vector<int>> dp(nr + 1, vector<int> (3, 0));
		for (int i = 0; i < nr; i++) {
			for (int j = 0; j < 3; j++) {
				dp[i + 1][j] = dp[i][max(j - 1, 0)];
				if(now[i].sc)
					dp[i + 1][j] = max(dp[i + 1][j], 1 + dp[i][2]);
				if(j == 0 && now[i].ft) 
					dp[i + 1][j] = max(dp[i + 1][j], 1 + dp[i][0]);
			}
		}
		ans += dp[nr][0];
	}
	cout << ans << endl;
}

컴파일 시 표준 에러 (stderr) 메시지

dango_maker.cpp: In function 'int main()':
dango_maker.cpp:32:12: warning: unused variable 'cnt' [-Wunused-variable]
  int n, m, cnt = 0, ans = 0;
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...