#include <iostream>
#include <vector>
#include <queue>
#include <set>
using namespace std;
/*
Mecho takes at most S steps per minute.
Bees spread every minute.
(*) Restatement:
Mecho takes at most 1 step every minute.
Bees spread at the end of every S'th minute.
For every location, compute the number of minutes before the location cannot be occupied anymore.
For trees and hives this number is zero.
Consider hives as -1
Consider
*/
int N, S;
int grid[800*800]; //the number of minutes before this location cannot be occupied anymore.
int mecho;
int home;
vector<int> edge;
int dist[800*800];
//LOOKS GOOD
int INF = 2e9;
int binary_search(int a, int b)
{
// cout << "____________________________\n binary search " << a << ' ' << b << '\n';
int m = (a+b)/2+1;
if(a == b) m = a;
//cout << mecho << ' ' << dist[mecho] << ' ' << home << '\n';
for(int i = 0; i < N*N; i++) dist[i] = INF;
queue<int> tbv;
dist[mecho] = m;
tbv.push(mecho);
int u;
while(!tbv.empty())
{
u = tbv.front();
// cout << u << ' ' << dist[u] << '\n';
tbv.pop();
vector<int> edge; //check down
edge.clear();
if(u % N != 0) edge.push_back(u-1);
if(u % N != N-1) edge.push_back(u+1);
if(u >= N) edge.push_back(u-N);
if(u < N*(N-1)) edge.push_back(u+N);
for(int v: edge)
{
if(dist[v] != INF) continue;
if(dist[u] + 1 >= grid[v]) continue;
dist[v] = dist[u] + 1;
tbv.push(v);
}
}
if(a == b)
{
if(dist[home] == INF) return -1;
else return a/S;
}
else
{
if(dist[home] == INF) return binary_search(a, m-1);
else return binary_search(m, b);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
char c;
cin >> N >> S;
for(int i = 0; i < N*N; i++)
{
cin >> c;
if(c == 'T') grid[i] = 0;
else if(c == 'G') grid[i] = INF;
else if(c == 'M')
{
grid[i] = INF;
mecho = i;
}
else if(c == 'D')
{
grid[i] = 0;
home = i;
}
else grid[i] = -1;
}
int visit[N*N];
for(int i = 0; i < N*N; i++) visit[i] = 0;
queue<int> tbv;
for(int i = 0; i < N*N; i++)
{
if(grid[i] != -1) continue;
grid[i] = 0;
tbv.push(i);
visit[i] = 1;
}
while(tbv.size() > 0)
{
int u = tbv.front();
tbv.pop();
edge.clear();
if(u % N > 0) edge.push_back(u-1);
if(u % N < N-1) edge.push_back(u+1);
if(u >= N) edge.push_back(u-N);
if(u < N*(N-1)) edge.push_back(u+N);
for(int v: edge)
{
if(visit[v]) continue;
if(grid[v] > grid[u] + S)
{
grid[v] = grid[u] + S;
tbv.push(v);
}
}
}
grid[home] = INF;
// for(int i = 0; i < N*N; i++)
// {
// cout << grid[i] << ' ';
// if(i % N == N-1) cout << '\n';
// }
cout << binary_search(0, 2e9) << '\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
364 KB |
Output is correct |
2 |
Correct |
1 ms |
364 KB |
Output is correct |
3 |
Correct |
1 ms |
364 KB |
Output is correct |
4 |
Correct |
1 ms |
364 KB |
Output is correct |
5 |
Correct |
1 ms |
364 KB |
Output is correct |
6 |
Correct |
1 ms |
364 KB |
Output is correct |
7 |
Correct |
487 ms |
7916 KB |
Output is correct |
8 |
Correct |
0 ms |
364 KB |
Output is correct |
9 |
Correct |
1 ms |
364 KB |
Output is correct |
10 |
Correct |
1 ms |
364 KB |
Output is correct |
11 |
Correct |
1 ms |
364 KB |
Output is correct |
12 |
Execution timed out |
1077 ms |
5604 KB |
Time limit exceeded |
13 |
Incorrect |
1 ms |
364 KB |
Output isn't correct |
14 |
Correct |
2 ms |
364 KB |
Output is correct |
15 |
Correct |
1 ms |
364 KB |
Output is correct |
16 |
Correct |
1 ms |
364 KB |
Output is correct |
17 |
Correct |
1 ms |
364 KB |
Output is correct |
18 |
Correct |
1 ms |
364 KB |
Output is correct |
19 |
Correct |
1 ms |
364 KB |
Output is correct |
20 |
Correct |
1 ms |
364 KB |
Output is correct |
21 |
Correct |
1 ms |
364 KB |
Output is correct |
22 |
Correct |
1 ms |
364 KB |
Output is correct |
23 |
Correct |
1 ms |
364 KB |
Output is correct |
24 |
Correct |
1 ms |
364 KB |
Output is correct |
25 |
Correct |
1 ms |
364 KB |
Output is correct |
26 |
Correct |
1 ms |
364 KB |
Output is correct |
27 |
Correct |
1 ms |
492 KB |
Output is correct |
28 |
Correct |
2 ms |
492 KB |
Output is correct |
29 |
Correct |
1 ms |
492 KB |
Output is correct |
30 |
Correct |
1 ms |
492 KB |
Output is correct |
31 |
Correct |
2 ms |
512 KB |
Output is correct |
32 |
Correct |
1 ms |
492 KB |
Output is correct |
33 |
Correct |
12 ms |
1772 KB |
Output is correct |
34 |
Correct |
11 ms |
1872 KB |
Output is correct |
35 |
Correct |
176 ms |
1872 KB |
Output is correct |
36 |
Correct |
11 ms |
2284 KB |
Output is correct |
37 |
Correct |
12 ms |
2432 KB |
Output is correct |
38 |
Correct |
229 ms |
2412 KB |
Output is correct |
39 |
Correct |
15 ms |
2796 KB |
Output is correct |
40 |
Correct |
18 ms |
2796 KB |
Output is correct |
41 |
Correct |
287 ms |
2924 KB |
Output is correct |
42 |
Correct |
16 ms |
3308 KB |
Output is correct |
43 |
Correct |
32 ms |
3308 KB |
Output is correct |
44 |
Correct |
359 ms |
3436 KB |
Output is correct |
45 |
Correct |
20 ms |
3948 KB |
Output is correct |
46 |
Correct |
24 ms |
3948 KB |
Output is correct |
47 |
Correct |
446 ms |
4076 KB |
Output is correct |
48 |
Correct |
26 ms |
4588 KB |
Output is correct |
49 |
Correct |
36 ms |
4588 KB |
Output is correct |
50 |
Correct |
532 ms |
4764 KB |
Output is correct |
51 |
Correct |
32 ms |
5356 KB |
Output is correct |
52 |
Correct |
35 ms |
5356 KB |
Output is correct |
53 |
Correct |
674 ms |
5504 KB |
Output is correct |
54 |
Correct |
40 ms |
6124 KB |
Output is correct |
55 |
Correct |
43 ms |
6124 KB |
Output is correct |
56 |
Correct |
729 ms |
6300 KB |
Output is correct |
57 |
Correct |
36 ms |
7020 KB |
Output is correct |
58 |
Correct |
56 ms |
7020 KB |
Output is correct |
59 |
Correct |
843 ms |
7144 KB |
Output is correct |
60 |
Correct |
41 ms |
7936 KB |
Output is correct |
61 |
Correct |
50 ms |
7916 KB |
Output is correct |
62 |
Correct |
987 ms |
8044 KB |
Output is correct |
63 |
Correct |
298 ms |
7916 KB |
Output is correct |
64 |
Correct |
759 ms |
8020 KB |
Output is correct |
65 |
Correct |
580 ms |
7916 KB |
Output is correct |
66 |
Correct |
391 ms |
7924 KB |
Output is correct |
67 |
Correct |
332 ms |
7924 KB |
Output is correct |
68 |
Correct |
184 ms |
7916 KB |
Output is correct |
69 |
Correct |
130 ms |
7916 KB |
Output is correct |
70 |
Correct |
89 ms |
7916 KB |
Output is correct |
71 |
Correct |
93 ms |
7836 KB |
Output is correct |
72 |
Incorrect |
65 ms |
7916 KB |
Output isn't correct |
73 |
Incorrect |
151 ms |
8044 KB |
Output isn't correct |
74 |
Correct |
372 ms |
8108 KB |
Output is correct |
75 |
Correct |
288 ms |
8048 KB |
Output is correct |
76 |
Correct |
270 ms |
8172 KB |
Output is correct |
77 |
Correct |
314 ms |
8024 KB |
Output is correct |
78 |
Correct |
383 ms |
8040 KB |
Output is correct |
79 |
Correct |
318 ms |
7916 KB |
Output is correct |
80 |
Correct |
294 ms |
8092 KB |
Output is correct |
81 |
Correct |
309 ms |
8044 KB |
Output is correct |
82 |
Correct |
281 ms |
8044 KB |
Output is correct |
83 |
Correct |
384 ms |
7916 KB |
Output is correct |
84 |
Correct |
430 ms |
7916 KB |
Output is correct |
85 |
Correct |
328 ms |
8044 KB |
Output is correct |
86 |
Correct |
373 ms |
8044 KB |
Output is correct |
87 |
Correct |
373 ms |
8172 KB |
Output is correct |
88 |
Correct |
423 ms |
8192 KB |
Output is correct |
89 |
Correct |
549 ms |
7916 KB |
Output is correct |
90 |
Correct |
460 ms |
7916 KB |
Output is correct |
91 |
Correct |
480 ms |
7992 KB |
Output is correct |
92 |
Correct |
546 ms |
8056 KB |
Output is correct |