Submission #516279

# Submission time Handle Problem Language Result Execution time Memory
516279 2022-01-21T02:21:25 Z Tizariox Mecho (IOI09_mecho) C++14
95 / 100
499 ms 52972 KB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define F0R1(i, a) for (int i = 1; i <= (a); i++)
#define FORd(i, a, b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define F0Rd1(i, a) for (int i = a; i > 0; i--)
#define SORT(vec) sort(vec.begin(), vec.end())
#define S0RT(arr, n) sort(arr, arr + n)

#define pA first
#define pB second
#define MOD 1000000007
#define nl "\n"
#define pb push_back

int n, steps, rootX, rootY, homeX, homeY;

vector<pii> adj[800][800];
bool vis[800][800];
int dist[800][800];
bool visBee[800][800];
int distBee[800][800];
bool blocked[800][800];
bool blocked1[800][800];
vector<pii> hives;

void bfsBees() {
	queue<pii> bfsQueue;
	for (pii root : hives) {
		visBee[root.pA][root.pB] = true;
		bfsQueue.push(root);
		distBee[root.pA][root.pB] = 0;
	}
	while (!bfsQueue.empty()) {
		pii node = bfsQueue.front();
		bfsQueue.pop();
		for (pii neighbor : adj[node.pA][node.pB]) {
			if (!visBee[neighbor.pA][neighbor.pB] && !(neighbor.pA == homeX && neighbor.pB == homeY)) {
				visBee[neighbor.pA][neighbor.pB] = true;
				bfsQueue.push(neighbor);
				distBee[neighbor.pA][neighbor.pB] = distBee[node.pA][node.pB] + 1;
			}
		}
	}
}

bool bfs(int eatHoney) {
	FOR(i, 0, n) {
		FOR(j, 0, n) {
			vis[i][j] = false;
		}
	}
	queue<pii> bfsQueue;
	vis[rootX][rootY] = true;
	bfsQueue.push(pii(rootX, rootY));
	dist[rootX][rootY] = 0;
	if (distBee[rootX][rootY] <= eatHoney) {
		bfsQueue.pop();
	}
	while (!bfsQueue.empty()) {
		pii node = bfsQueue.front();
		bfsQueue.pop();
		for (pii neighbor : adj[node.pA][node.pB]) {
			int dist1 = dist[node.pA][node.pB] + 1;
			if (!vis[neighbor.pA][neighbor.pB] && ((double)dist1)/steps < distBee[neighbor.pA][neighbor.pB] - eatHoney) {
				vis[neighbor.pA][neighbor.pB] = true;
				if (neighbor.pA == homeX && neighbor.pB == homeY) {
					return true;
				}
				bfsQueue.push(neighbor);
				dist[neighbor.pA][neighbor.pB] = dist1;
			}
		}
	}
	for (pii i : adj[homeX][homeY]) {
		if (vis[i.pA][i.pB]) {
			return true;
		}
	}
	return false;
}

void gridAdj() {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (!blocked[i][j]) {
				if (i > 0 && !blocked[i - 1][j]) {
					adj[i][j].pb(pii(i - 1, j));
				}
				if (i < n - 1 && !blocked[i + 1][j]) {
					adj[i][j].pb(pii(i + 1, j));
				}
				if (j > 0 && !blocked[i][j - 1]) {
					adj[i][j].pb(pii(i, j - 1));
				}
				if (j < n - 1 && !blocked[i][j + 1]) {
					adj[i][j].pb(pii(i, j + 1));
				}
			}
		}
	}
}

int main() {
	// freopen("!.in", "r", stdin);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> steps;
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		FOR(j, 0, n) {
			if (s[j] == 'T') {
				blocked[i][j] = true;
			} else if (s[j] == 'M') {
				rootX = i;
				rootY = j;
			} else if (s[j] == 'D') {
				homeX = i;
				homeY = j;
			} else if (s[j] == 'H') {
				hives.pb(pii(i, j));
			}
		}
	}
	FOR(i, 0, n) {
		FOR(j, 0, n) {
			vis[i][j] = false;
			visBee[i][j] = false;
			dist[i][j] = 1e9;
			distBee[i][j] = 1e9;
			blocked1[i][j] = false;
		}
	}
	gridAdj();
	bfsBees();
	int l = 0;
	int r = 1e6;
	int ans = l - 1;
	while (l <= r) {
		ll mid = (r + l) / 2;
		if (bfs(mid)) {
			ans = mid;
			l = mid + 1;
		} else {
			r = mid - 1;
		}
	}
	cout << ans << nl;
}
# Verdict Execution time Memory Grader output
1 Correct 7 ms 15308 KB Output is correct
2 Correct 10 ms 15364 KB Output is correct
3 Correct 8 ms 15308 KB Output is correct
4 Correct 7 ms 15308 KB Output is correct
5 Correct 8 ms 15436 KB Output is correct
6 Correct 7 ms 15436 KB Output is correct
7 Correct 398 ms 52972 KB Output is correct
8 Correct 7 ms 15436 KB Output is correct
9 Correct 10 ms 15436 KB Output is correct
10 Correct 7 ms 15436 KB Output is correct
11 Correct 7 ms 15436 KB Output is correct
12 Incorrect 8 ms 15948 KB Output isn't correct
13 Correct 8 ms 15880 KB Output is correct
14 Correct 9 ms 15980 KB Output is correct
15 Correct 9 ms 15472 KB Output is correct
16 Correct 8 ms 15564 KB Output is correct
17 Correct 8 ms 15564 KB Output is correct
18 Correct 8 ms 15564 KB Output is correct
19 Correct 8 ms 15564 KB Output is correct
20 Correct 8 ms 15564 KB Output is correct
21 Correct 11 ms 15692 KB Output is correct
22 Correct 8 ms 15692 KB Output is correct
23 Correct 8 ms 15772 KB Output is correct
24 Correct 7 ms 15820 KB Output is correct
25 Correct 9 ms 15948 KB Output is correct
26 Correct 8 ms 15948 KB Output is correct
27 Correct 8 ms 15960 KB Output is correct
28 Correct 8 ms 15948 KB Output is correct
29 Correct 9 ms 16108 KB Output is correct
30 Correct 8 ms 16076 KB Output is correct
31 Correct 8 ms 16076 KB Output is correct
32 Correct 8 ms 16076 KB Output is correct
33 Correct 15 ms 20544 KB Output is correct
34 Correct 15 ms 20456 KB Output is correct
35 Correct 76 ms 22468 KB Output is correct
36 Correct 25 ms 21708 KB Output is correct
37 Correct 17 ms 21580 KB Output is correct
38 Correct 84 ms 24088 KB Output is correct
39 Correct 23 ms 22776 KB Output is correct
40 Correct 20 ms 22732 KB Output is correct
41 Correct 124 ms 25884 KB Output is correct
42 Correct 25 ms 23948 KB Output is correct
43 Correct 23 ms 23940 KB Output is correct
44 Correct 173 ms 27840 KB Output is correct
45 Correct 25 ms 25292 KB Output is correct
46 Correct 32 ms 25248 KB Output is correct
47 Correct 210 ms 29904 KB Output is correct
48 Correct 30 ms 26572 KB Output is correct
49 Correct 35 ms 26544 KB Output is correct
50 Correct 255 ms 32152 KB Output is correct
51 Correct 31 ms 28100 KB Output is correct
52 Correct 37 ms 28072 KB Output is correct
53 Correct 299 ms 34644 KB Output is correct
54 Correct 46 ms 29512 KB Output is correct
55 Correct 35 ms 29516 KB Output is correct
56 Correct 357 ms 37220 KB Output is correct
57 Correct 40 ms 31172 KB Output is correct
58 Correct 43 ms 31196 KB Output is correct
59 Correct 412 ms 40060 KB Output is correct
60 Correct 43 ms 32852 KB Output is correct
61 Correct 46 ms 32884 KB Output is correct
62 Correct 499 ms 42948 KB Output is correct
63 Correct 215 ms 36392 KB Output is correct
64 Correct 342 ms 36396 KB Output is correct
65 Correct 314 ms 36292 KB Output is correct
66 Correct 263 ms 36400 KB Output is correct
67 Correct 227 ms 36420 KB Output is correct
68 Correct 122 ms 36412 KB Output is correct
69 Correct 125 ms 36428 KB Output is correct
70 Correct 109 ms 36388 KB Output is correct
71 Correct 102 ms 36320 KB Output is correct
72 Correct 100 ms 36428 KB Output is correct
73 Correct 218 ms 52920 KB Output is correct
74 Correct 269 ms 52916 KB Output is correct
75 Correct 293 ms 52920 KB Output is correct
76 Correct 279 ms 52920 KB Output is correct
77 Correct 288 ms 52916 KB Output is correct
78 Correct 328 ms 52936 KB Output is correct
79 Correct 233 ms 52904 KB Output is correct
80 Correct 254 ms 52904 KB Output is correct
81 Correct 309 ms 52904 KB Output is correct
82 Correct 216 ms 52872 KB Output is correct
83 Correct 375 ms 52788 KB Output is correct
84 Correct 360 ms 52780 KB Output is correct
85 Correct 352 ms 52780 KB Output is correct
86 Correct 355 ms 52904 KB Output is correct
87 Correct 350 ms 52788 KB Output is correct
88 Correct 399 ms 52804 KB Output is correct
89 Correct 401 ms 52804 KB Output is correct
90 Correct 414 ms 52812 KB Output is correct
91 Correct 376 ms 52808 KB Output is correct
92 Correct 417 ms 52800 KB Output is correct