Submission #501334

#TimeUsernameProblemLanguageResultExecution timeMemory
501334sidonMecho (IOI09_mecho)C++17
35 / 100
192 ms6168 KiB
#include <bits/stdc++.h>
using namespace std;
#define c(X, Y) (X * N + Y)
 
const int INF = 1e8;
 
const int di[4] = {-1, 1, 0, 0};
const int dj[4] = {0, 0, -1, 1};
 
int N, S, h[1<<20], m[1<<20], o[1<<20], ans = -1, home;
 
string g[1<<10];
 
void BFS(char src, int *d, auto valid) {
	fill(d, d + N * N, INF);
	queue<int> q;
	for(int i = 0; i < N; i++) 
		for(int j = 0; j < N; j++)
			if(g[i][j] == src)
				d[c(i, j)] = 0, q.push(c(i, j));
			else if(g[i][j] == 'D')
				home = c(i, j);
 
	while(!empty(q)) {
		int k = q.front(), i = k / N, j = k % N; q.pop();
 
		for(int s = 0; s < 4; s++) {
			int x = i + di[s], y = j + dj[s], z = c(x, y);
 
			if(min(x, y) < 0 || max(x, y) >= N || d[z] != INF) continue;
			if(valid(x, y, d[k] + 1))
				d[z] = d[k] + 1, q.push(z);
		}
	}
}
 
signed main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> N >> S;
 
	for(int i = 0; i < N; i++)
		cin >> g[i];
 
	BFS('H', h, [&](int i, int j, int k) {
		return g[i][j] & 1;
	});
 
	BFS('D', m, [&](int i, int j, int k) {
		return g[i][j] & 1;
	});
 
	for(int i = 0; i < N * N; i++)
		h[i] += m[i] <= S;
 
	for(int b = 30; --b >= 0; ) {
		ans += 1 << b;
		BFS('M', m, [&](int i, int j, int k) {
			return (g[i][j] & 1 || g[i][j] == 'D') && ((k + S - 1) / S + ans - !bool(k % S) < h[c(i, j)]);
		});
		if(m[home] == INF)
			ans -= 1 << b;
	}
	cout << ans;
}

Compilation message (stderr)

mecho.cpp:14:28: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
   14 | void BFS(char src, int *d, auto valid) {
      |                            ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...