Submission #886643

#TimeUsernameProblemLanguageResultExecution timeMemory
886643MongHwaTracks in the Snow (BOI13_tracks)C++17
100 / 100
554 ms131632 KiB
#include <iostream>
#include <queue>
#include <tuple>
using namespace std;

#define INF 0x7f7f7f7f

string stage[4001];
int status[4001][4001];

int dirx[] = {1, -1, 0, 0};
int diry[] = {0, 0, 1, -1};
deque<pair<int, int>> dq;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	int h, w;
	cin >> h >> w;

	int sum = 0;
	for(int i = 0; i < h; i++)
	{
		cin >> stage[i];
		for(int j = 0; j < w; j++)
			status[i][j] = INF;
	}

	int ans = 0;
	status[0][0] = 1;
	dq.push_front({0, 0});
	while(!dq.empty())
	{
		int x, y;
		tie(x, y) = dq.front(); dq.pop_front();
		
		for(int i = 0; i < 4; i++)
		{
			int dx = x + dirx[i];
			int dy = y + diry[i];

			if(dx < 0 || dx >= h || dy < 0 || dy >= w)
				continue;
			if(stage[dx][dy] == '.')
				continue;

			if(stage[dx][dy] == stage[x][y] && status[dx][dy] > status[x][y])
			{
				status[dx][dy] = status[x][y];
				ans = max(ans, status[dx][dy]);
				dq.push_front({dx, dy});
			}
			else if(stage[dx][dy] != stage[x][y] && status[dx][dy] > status[x][y]+1)
			{
				status[dx][dy] = status[x][y]+1;
				ans = max(ans, status[dx][dy]);
				dq.push_back({dx, dy});
			}
		}
	}
	
	cout << ans << '\n';
}

Compilation message (stderr)

tracks.cpp: In function 'int main()':
tracks.cpp:23:6: warning: unused variable 'sum' [-Wunused-variable]
   23 |  int sum = 0;
      |      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...