Submission #1185144

#TimeUsernameProblemLanguageResultExecution timeMemory
1185144prism7kTracks in the Snow (BOI13_tracks)C++20
100 / 100
1002 ms119136 KiB
#include <bits/stdc++.h>
using namespace std;

char grid[4000][4000];
int dist[4000][4000];
vector<pair<int, int>> dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

int main() {
	int h, w; cin >> h >> w;
	for(int i = 0; i < h; ++i) {
		for(int j = 0; j < w; ++j) {
			cin >> grid[i][j];
		}
	}
	function<bool(int, int)> valid = [&](int y, int x) {
		return (y >= 0 && y < h && x >= 0 && x < w);
	};
	int ans = 0;
	deque<pair<int, int>> q;
	q.push_front({0, 0});
	dist[0][0] = 1;
	while(!q.empty()) {
		int y = q.front().first, x = q.front().second;
		q.pop_front();
		ans = max(ans, dist[y][x]);
		
		for(auto dir : dirs) {
			int dy = y + dir.first;
			int dx = x + dir.second;
			if(!valid(dy, dx)) continue;
			if(dist[dy][dx] != 0 || grid[dy][dx] == '.') continue;
			if(grid[dy][dx] != grid[y][x]) {
				dist[dy][dx] = dist[y][x] + 1;
				q.push_back({dy, dx});
			} else {
				dist[dy][dx] = dist[y][x];
				q.push_front({dy, dx});
			}
		}
	}
	cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...