Submission #1075136

# Submission time Handle Problem Language Result Execution time Memory
1075136 2024-08-25T18:57:54 Z pawned COVID tests (CEOI24_covid) C++17
0 / 100
24 ms 40404 KB
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<int> vi;

const char nl = '\n';

void fastIO() {
	ios::sync_with_stdio(false);
	cin.tie(0);
}

int dirX[4] = {-1, 1, 0, 0};
int dirY[4] = {0, 0, -1, 1};

const int MAX = 5005;

int main() {
	fastIO();
	int N;
	cin>>N;
	int x1, y1, x2, y2;
	cin>>x1>>y1>>x2>>y2;
	x1--; y1--; x2--; y2--;
	vi L(N, 0);
	for (int i = 0; i < N; i++) {
		cin>>L[i];
		L[i]++;
	}
	vector<vi> dist(N, vi(MAX, 1e9));
	queue<ii> q;	// {x, y}
	q.push({x1, y1});
	dist[x1][y1] = 0;
	while (!q.empty()) {
		ii p = q.front();
//		cout<<"at "<<p.fi<<", "<<p.se<<endl;
		q.pop();
		for (int i = 0; i < 4; i++) {
			int nx = p.fi + dirX[i];
			int ny = p.se + dirY[i];
			if (nx < 0 || nx >= N)	// can't go up / down when at edge
				continue;
			if (nx == 0 && ny == -1)	// can't go left at start
				continue;
			if (nx == N - 1 && ny == L[N - 1] - 1)	// can't go right at end
				continue;
			if (ny == L[nx]) {
				nx++;
				ny = 0;
			}
			else if (ny == -1) {
				nx--;
				ny = L[nx] - 1;
			}
			ny = min(ny, L[nx] - 1);
			if (dist[nx][ny] == 1e9) {
//				cout<<"going to "<<nx<<" "<<ny<<endl;
				dist[nx][ny] = dist[p.fi][p.se] + 1;
				q.push({nx, ny});
			}
		}
	}
//	cout<<"ANSWER: ";
	cout<<dist[x2][y2]<<endl;
}
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 856 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 22 ms 40404 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 24 ms 40356 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -