#include <bits/stdc++.h>
using namespace std;
const int Nmax = 2010;
map<int,int> mpx, mpy;
int X1, X2, Y1, Y2, n, N, M;
int dist[Nmax][Nmax][4];
int a[Nmax], b[Nmax], c[Nmax], d[Nmax], mat[Nmax][Nmax];
int i, j;
bool blocked[Nmax][Nmax][4];
int dx[] = {0, 0, -1, 1};
int dy[] = {-1, 1, 0, 0};
struct state
{
int x, y, dir;
};
int solve()
{
queue<state> q;
q.push({X1, Y1, 0});
q.push({X1, Y1, 1});
q.push({X1, Y1, 2});
q.push({X1, Y1, 3});
int x, y, dir, i, X, Y, Dist;
for(x=1; x<=N; ++x)
for(y=1; y<=M; ++y)
for(dir=0; dir<4; ++dir)
dist[x][y][dir] = ((x==X1 && y==Y1) ? 0 : 10 * Nmax);
while(q.size())
{
x = q.front().x;
y = q.front().y;
dir = q.front().dir;
q.pop();
for(i=0; i<4; ++i)
{
X = x + dx[i];
Y = y + dy[i];
Dist = dist[x][y][dir] + (i != dir);
if(dist[X][Y][i] > Dist && !blocked[X][Y][i])
{
dist[X][Y][i] = Dist;
q.push({X, Y, i});
}
}
}
int ans = 10 * Nmax;
for(i=0; i<4; ++i)
ans = min(ans, dist[X2][Y2][i]);
return ans;
}
int main()
{
// freopen("input", "r", stdin);
cin.sync_with_stdio(false);
cin >> X1 >> Y1 >> X2 >> Y2;
cin >> n;
mpx[X1] = mpx[X2] = mpy[Y1] = mpy[Y2] = 1;
int i;
for(i=1; i<=n; ++i)
{
cin >> a[i] >> c[i] >> b[i] >> d[i];
mpx[a[i]] = mpx[c[i]] = mpy[b[i]] = mpy[d[i]] = 1;
}
for(auto &it : mpx) it.second = ++N;
for(auto &it : mpy) it.second = ++M;
X1 = mpx[X1]; X2 = mpx[X2];
Y1 = mpy[Y1]; Y2 = mpy[Y2];
for(i=1; i<=n; ++i)
{
a[i] = mpx[a[i]];
b[i] = mpy[b[i]];
c[i] = mpx[c[i]];
d[i] = mpy[d[i]];
}
for(i=1; i<=n; ++i)
{
for(j=a[i]+1; j<=c[i]-1; ++j) blocked[j][b[i]+1][1] = blocked[j][d[i]-1][0] = 1;
for(j=b[i]+1; j<=d[i]-1; ++j) blocked[a[i]+1][j][3] = blocked[c[i]-1][j][2] = 1;
}
cout << solve() + 1 << '\n';
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
6 ms |
512 KB |
Output is correct |
3 |
Correct |
6 ms |
512 KB |
Output is correct |
4 |
Correct |
12 ms |
2432 KB |
Output is correct |
5 |
Correct |
222 ms |
18688 KB |
Output is correct |
6 |
Correct |
158 ms |
19960 KB |
Output is correct |
7 |
Correct |
143 ms |
18912 KB |
Output is correct |
8 |
Correct |
135 ms |
20600 KB |
Output is correct |
9 |
Correct |
193 ms |
19200 KB |
Output is correct |
10 |
Correct |
152 ms |
20344 KB |
Output is correct |
11 |
Correct |
189 ms |
21120 KB |
Output is correct |
12 |
Correct |
136 ms |
19968 KB |
Output is correct |
13 |
Correct |
138 ms |
20088 KB |
Output is correct |
14 |
Correct |
191 ms |
20528 KB |
Output is correct |
15 |
Correct |
30 ms |
6784 KB |
Output is correct |
16 |
Correct |
194 ms |
19612 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
6 ms |
512 KB |
Output is correct |
3 |
Correct |
6 ms |
512 KB |
Output is correct |
4 |
Correct |
12 ms |
2432 KB |
Output is correct |
5 |
Correct |
222 ms |
18688 KB |
Output is correct |
6 |
Correct |
158 ms |
19960 KB |
Output is correct |
7 |
Correct |
143 ms |
18912 KB |
Output is correct |
8 |
Correct |
135 ms |
20600 KB |
Output is correct |
9 |
Correct |
193 ms |
19200 KB |
Output is correct |
10 |
Correct |
152 ms |
20344 KB |
Output is correct |
11 |
Correct |
189 ms |
21120 KB |
Output is correct |
12 |
Correct |
136 ms |
19968 KB |
Output is correct |
13 |
Correct |
138 ms |
20088 KB |
Output is correct |
14 |
Correct |
191 ms |
20528 KB |
Output is correct |
15 |
Correct |
30 ms |
6784 KB |
Output is correct |
16 |
Correct |
194 ms |
19612 KB |
Output is correct |
17 |
Correct |
1265 ms |
78084 KB |
Output is correct |
18 |
Correct |
744 ms |
77876 KB |
Output is correct |
19 |
Correct |
740 ms |
78644 KB |
Output is correct |
20 |
Correct |
1053 ms |
78728 KB |
Output is correct |
21 |
Correct |
1502 ms |
79564 KB |
Output is correct |
22 |
Correct |
1129 ms |
79548 KB |
Output is correct |
23 |
Correct |
1064 ms |
79296 KB |
Output is correct |
24 |
Correct |
1129 ms |
79384 KB |
Output is correct |
25 |
Correct |
879 ms |
79452 KB |
Output is correct |
26 |
Correct |
989 ms |
79356 KB |
Output is correct |
27 |
Correct |
43 ms |
8832 KB |
Output is correct |
28 |
Correct |
187 ms |
22904 KB |
Output is correct |
29 |
Correct |
166 ms |
23416 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
384 KB |
Output is correct |
2 |
Correct |
6 ms |
512 KB |
Output is correct |
3 |
Correct |
6 ms |
512 KB |
Output is correct |
4 |
Correct |
12 ms |
2432 KB |
Output is correct |
5 |
Correct |
222 ms |
18688 KB |
Output is correct |
6 |
Correct |
158 ms |
19960 KB |
Output is correct |
7 |
Correct |
143 ms |
18912 KB |
Output is correct |
8 |
Correct |
135 ms |
20600 KB |
Output is correct |
9 |
Correct |
193 ms |
19200 KB |
Output is correct |
10 |
Correct |
152 ms |
20344 KB |
Output is correct |
11 |
Correct |
189 ms |
21120 KB |
Output is correct |
12 |
Correct |
136 ms |
19968 KB |
Output is correct |
13 |
Correct |
138 ms |
20088 KB |
Output is correct |
14 |
Correct |
191 ms |
20528 KB |
Output is correct |
15 |
Correct |
30 ms |
6784 KB |
Output is correct |
16 |
Correct |
194 ms |
19612 KB |
Output is correct |
17 |
Correct |
1265 ms |
78084 KB |
Output is correct |
18 |
Correct |
744 ms |
77876 KB |
Output is correct |
19 |
Correct |
740 ms |
78644 KB |
Output is correct |
20 |
Correct |
1053 ms |
78728 KB |
Output is correct |
21 |
Correct |
1502 ms |
79564 KB |
Output is correct |
22 |
Correct |
1129 ms |
79548 KB |
Output is correct |
23 |
Correct |
1064 ms |
79296 KB |
Output is correct |
24 |
Correct |
1129 ms |
79384 KB |
Output is correct |
25 |
Correct |
879 ms |
79452 KB |
Output is correct |
26 |
Correct |
989 ms |
79356 KB |
Output is correct |
27 |
Correct |
43 ms |
8832 KB |
Output is correct |
28 |
Correct |
187 ms |
22904 KB |
Output is correct |
29 |
Correct |
166 ms |
23416 KB |
Output is correct |
30 |
Runtime error |
600 ms |
49832 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
31 |
Halted |
0 ms |
0 KB |
- |