Submission #93234

#TimeUsernameProblemLanguageResultExecution timeMemory
93234Alexa2001Golf (JOI17_golf)C++17
30 / 100
1502 ms79564 KiB
#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; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...