제출 #1328012

#제출 시각아이디문제언어결과실행 시간메모리
1328012jumpDango Maker (JOI18_dango_maker)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
#define int long long
int pref[3001][3001];
bool dango[3001][3001][2];
signed main() {
	int n,m;
	std::cin >> n >> m;
	std::vector<std::string> grid;
	for(int i=0;i<n;i++){
		std::string s;
		std::cin >> s;
		grid.push_back(s);
	}
	int best = 0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(j>=2&&grid[i][j]=='W'&&grid[i][j-1]=='G'&&grid[i][j-2]=='R')dango[i][j][0]=true;
			if(i>=2&&grid[i][j]=='W'&&grid[i-1][j]=='G'&&grid[i-2][j]=='R')dango[i][j][1]=true;
			int v11=0,v12=0,v22=0,v21=0,v33=0,v31=0,v32=0;
			if(i>2)//std::cout<<"HELLOWORLD";
			v11 = pref[i-3][j];
			if(i>0)
			v12 = pref[i-1][j];
			if(j>2)
			v22 = pref[i][j-3];
			if(j>0)
			v21 = pref[i][j-1];
			if(i>2&&j>2)
			v33 = pref[i-3][j-3];
			if(i>0&&j>2)
			v31 = pref[i-1][j-3];
			if(i>2&&j>0)
			v32 = pref[i-3][j-1];
			pref[i][j]=std::max(v11+v22-v33,std::max(v12+v22-v31,v11+v21-v32));
			if(i>0)
			pref[i][j]=std::max(pref[i-1][j],pref[i][j]);
			if(j>0)
			pref[i][j]=std::max(pref[i][j-1],pref[i][j]);
			if(dango[i][j][1]){
				int v1=0;
				int v2=0;
				int v3=0;
				if(i>2)v1=pref[i-3][j];
				if(j>0)v2=pref[i][j-1];
				if(j>0&&i>2)v3=pref[i-3][j-1];
				pref[i][j]=std::max(pref[i][j],v1+v2-v3+1);
			}
			if(dango[i][j][0]){
				int v1=0;
				int v2=0;
				int v3=0;
				if(i>0)v1=pref[i-1][j];
				if(j>2)v2=pref[i][j-3];
				if(j>2&&i>0)v3=pref[i-1][j-3];
				pref[i][j]=std::max(pref[i][j],v1+v2-v3+1);
			}
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			std::cout << dango[i][j][0] << '|' << dango[i][j][1] << ' ';
		}
		std::cout << '\n';
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			std::cout << pref[i][j] << ' ';
		}
		std::cout << '\n';
	}
	std::cout << pref[n-1][m-1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...