272202026-05-05 09:52:01PappMatyasLegközelebbi mezőkcpp17Elfogadva 100/100777ms34716 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct int2
{
	int x;
	int y;
};

vector<vector<int>> map;
vector<int2> aBorder(0);
vector<int2> bBorder(0);
int2 aPos;
int2 bPos;
int n, m;

static bool Compare(int2 a, int2 b)
{
	return a.x + a.y < b.x + b.y;
}

static void ExploreMap(int v, int x, int y)
{
	map[x][y] = v;
	bool added = false;
	if (x - 1 >= 0)
	{
		if (map[x - 1][y] == 0)
		{
			ExploreMap(v, x - 1, y);
		}
		else
		{
			if (map[x - 1][y] == 1)
			{
				if(v == 2) aBorder.push_back({ x, y });
				else bBorder.push_back({ x, y });
				added = true;
			}
		}
	}

	if (x + 1 < n)
	{
		if (map[x + 1][y] == 0)
		{
			ExploreMap(v, x + 1, y);
		}
		else
		{
			if (map[x + 1][y] == 1 && !added)
			{
				if (v == 2) aBorder.push_back({ x, y });
				else bBorder.push_back({ x, y });
				added = true;
			}
		}
	}

	if (y - 1 >= 0)
	{
		if (map[x][y - 1] == 0)
		{
			ExploreMap(v, x, y - 1);
		}
		else
		{
			if (map[x][y - 1] == 1 && !added)
			{
				if (v == 2) aBorder.push_back({ x, y });
				else bBorder.push_back({ x, y });
				added = true;
			}
		}
	}

	if (y + 1 < m)
	{
		if (map[x][y + 1] == 0)
		{
			ExploreMap(v, x, y + 1);
		}
		else
		{
			if (map[x][y + 1] == 1 && !added)
			{
				if (v == 2) aBorder.push_back({ x, y });
				else bBorder.push_back({ x, y });
			}
		}
	}
}

int main()
{
	cin.tie(nullptr);
	iostream::sync_with_stdio(false);

	char c;
	cin >> n >> m;
	map.resize(n);

	for (int i = 0; i < n; i++)
	{
		map[i].resize(m);
		for (int j = 0; j < m; j++)
		{
			cin >> c;
			map[i][j] = (c == '#' ? 1 : 0);
			if (c == 'A')
			{
				aPos = { i, j };
			}
			if (c == 'B')
			{
				bPos = { i, j };
			}
		}
	}

	ExploreMap(2, aPos.x, aPos.y);

	if (map[bPos.x][bPos.y] != 0)
	{
		cout << 0;
		return 0;
	}
	ExploreMap(3, bPos.x, bPos.y);

	int minimDist = 10000;

	sort(aBorder.begin(), aBorder.end(), Compare);
	sort(bBorder.begin(), bBorder.end(), Compare);
	if (aBorder[0].x + aBorder[0].y < bBorder[0].x + bBorder[0].y)
	{
		for (int i = 0; i < aBorder.size(); i++)
		{
			for (int j = 0; j < bBorder.size(); j++)
			{
				minimDist = min(minimDist, abs(aBorder[i].x - bBorder[j].x) + abs(aBorder[i].y - bBorder[j].y));
				if (bBorder[j].x + bBorder[j].y - aBorder[i].x - aBorder[i].y >= minimDist) break;
			}
			if (minimDist == 2) break;
		}
	}
	else
	{
		for (int i = 0; i < bBorder.size(); i++)
		{
			for (int j = 0; j < aBorder.size(); j++)
			{
				minimDist = min(minimDist, abs(bBorder[i].x - aBorder[j].x) + abs(bBorder[i].y - aBorder[j].y));
				if (aBorder[j].x + aBorder[j].y - bBorder[i].x - bBorder[i].y >= minimDist) break;
			}
			if (minimDist == 2) break;
		}
	}

	
	cout << minimDist;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms508 KiB
3Elfogadva1ms316 KiB
subtask210/10
4Elfogadva1ms332 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms500 KiB
7Elfogadva1ms316 KiB
8Elfogadva2ms512 KiB
9Elfogadva1ms564 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms756 KiB
subtask320/20
15Elfogadva8ms2100 KiB
16Elfogadva7ms2868 KiB
17Elfogadva65ms19512 KiB
18Elfogadva32ms8680 KiB
19Elfogadva4ms1604 KiB
20Elfogadva8ms2692 KiB
21Elfogadva7ms3128 KiB
22Elfogadva39ms9996 KiB
23Elfogadva7ms2200 KiB
24Elfogadva143ms16320 KiB
subtask420/20
25Elfogadva1ms332 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms500 KiB
28Elfogadva16ms4072 KiB
29Elfogadva14ms3636 KiB
30Elfogadva14ms3124 KiB
31Elfogadva14ms3636 KiB
32Elfogadva12ms3104 KiB
33Elfogadva16ms4148 KiB
34Elfogadva17ms4080 KiB
35Elfogadva12ms2960 KiB
36Elfogadva14ms3892 KiB
37Elfogadva16ms4116 KiB
38Elfogadva29ms7308 KiB
39Elfogadva68ms16092 KiB
40Elfogadva68ms16096 KiB
41Elfogadva63ms16080 KiB
42Elfogadva68ms16124 KiB
subtask550/50
43Elfogadva1ms332 KiB
44Elfogadva1ms316 KiB
45Elfogadva1ms500 KiB
46Elfogadva1ms316 KiB
47Elfogadva2ms512 KiB
48Elfogadva1ms564 KiB
49Elfogadva1ms316 KiB
50Elfogadva1ms316 KiB
51Elfogadva1ms316 KiB
52Elfogadva1ms316 KiB
53Elfogadva1ms756 KiB
54Elfogadva8ms2100 KiB
55Elfogadva7ms2868 KiB
56Elfogadva65ms19512 KiB
57Elfogadva32ms8680 KiB
58Elfogadva4ms1604 KiB
59Elfogadva8ms2692 KiB
60Elfogadva7ms3128 KiB
61Elfogadva39ms9996 KiB
62Elfogadva7ms2200 KiB
63Elfogadva143ms16320 KiB
64Elfogadva16ms4072 KiB
65Elfogadva14ms3636 KiB
66Elfogadva14ms3124 KiB
67Elfogadva14ms3636 KiB
68Elfogadva12ms3104 KiB
69Elfogadva16ms4148 KiB
70Elfogadva17ms4080 KiB
71Elfogadva12ms2960 KiB
72Elfogadva14ms3892 KiB
73Elfogadva16ms4116 KiB
74Elfogadva29ms7308 KiB
75Elfogadva68ms16092 KiB
76Elfogadva68ms16096 KiB
77Elfogadva63ms16080 KiB
78Elfogadva68ms16124 KiB
79Elfogadva52ms9892 KiB
80Elfogadva48ms7768 KiB
81Elfogadva43ms8440 KiB
82Elfogadva21ms5188 KiB
83Elfogadva87ms6316 KiB
84Elfogadva50ms20652 KiB
85Elfogadva277ms4928 KiB
86Elfogadva52ms5524 KiB
87Elfogadva76ms6896 KiB
88Elfogadva50ms11772 KiB
89Elfogadva101ms6412 KiB
90Elfogadva215ms9644 KiB
91Elfogadva52ms12976 KiB
92Elfogadva30ms6056 KiB
93Elfogadva35ms7860 KiB
94Elfogadva45ms11328 KiB
95Elfogadva26ms7596 KiB
96Elfogadva21ms5172 KiB
97Elfogadva37ms8508 KiB
98Elfogadva26ms5796 KiB
99Elfogadva97ms21900 KiB
100Elfogadva379ms31788 KiB
101Elfogadva72ms8108 KiB
102Elfogadva128ms27048 KiB
103Elfogadva101ms27512 KiB
104Elfogadva186ms34716 KiB
105Elfogadva298ms27348 KiB
106Elfogadva163ms33104 KiB
107Elfogadva777ms27560 KiB