제출 #1216246

#제출 시각아이디문제언어결과실행 시간메모리
1216246trimkusMaze (JOI23_ho_t3)C++20
0 / 100
2093 ms1472 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;




int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int r, c, N;
	cin >> r >> c >> N;
	int sti, stj, eni, enj;
	cin >> sti >> stj >> eni >> enj;
	sti -= 1;
	stj -= 1;
	eni -= 1;
	enj -= 1;
	vector<vector<char>> a(r, vector<char>(c));
	for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) cin >> a[i][j];
	vector<vector<int>> dist(r, vector<int>(c, r * c + 1));
	deque<array<int, 6>> dq;
	dq.push_back({sti, stj, -1, -1, r, c});
	dist[sti][stj] = 0;
	vector<int> dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};
	while (dq.size()) {
		int ri = dq.front()[0];
		int rj = dq.front()[1];
		int mxi = dq.front()[2];
		int mxj = dq.front()[3];
		int mni = dq.front()[4];
		int mnj = dq.front()[5];
		dq.pop_front();
		for (int k = 0; k < 4; ++k) {
			int ni = ri + dx[k];
			int nj = rj + dy[k];
			if (ni < 0 || nj < 0 || ni >= r || nj >= c) continue;
			int nmxi = max(mxi, ni);
			int nmni = min(mni, ni);
			int nmxj = max(mxj, nj);
			int nmnj = min(mnj, nj);
			int add = ((nmxi - nmni >= N || nmxj - nmnj >= N) && a[ni][nj] == '#');
			if (a[ni][nj] == '#' && a[ri][rj] == '.') add = 1;
			if (add == 0) {
				if (dist[ni][nj] > dist[ri][rj]) {
					dist[ni][nj] = dist[ri][rj];
					if (a[ni][nj] == '#') dq.push_front({ni, nj, nmxi, nmxj, nmni, nmnj});
					else dq.push_front({ni, nj, -1, -1, r, c});
				}
			} else {
				if (dist[ni][nj] > dist[ri][rj] + add) {
					dist[ni][nj] = dist[ri][rj] + add;
					dq.push_front({ni, nj, ni, nj, ni, nj});
				}
			}
		}
	}
	//~ for (int i = 0; i < r; ++i) {
		//~ for (int j = 0; j < c; ++j) {
			//~ cout << dist[i][j] << " ";
		//~ }
		//~ cout << "\n";
	//~ }
	cout << dist[eni][enj] << "\n";
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...