Submission #1177068

#TimeUsernameProblemLanguageResultExecution timeMemory
1177068AgageldiJakarta Skyscrapers (APIO15_skyscraper)C++20
10 / 100
1096 ms584 KiB
#include "bits/stdc++.h"
using namespace std;

#define N 30005
#define ll long long
#define ff first
#define ss second
#define pb push_back
#define SZ(v) (int)v.size()

int n, m, ans = INT_MAX, j[N], dp[300001], pos[300001];
vector <pair<int,int>> v;

void solve(int dog) {
	if(abs(pos[dog] - pos[1]) % j[dog] == 0){
		dp[1] = min(dp[1], dp[dog] + abs(pos[dog] - pos[1]) / j[dog]);
		return;
	}
	for(int i = 0; i < SZ(v); i++) {
		if(i == dog || abs(v[i].ff - pos[dog]) % j[dog] != 0 || dp[i] <= dp[dog] + abs(v[i].ff - pos[dog]) / j[dog]) continue;
		dp[i] = dp[dog] + abs(v[i].ff - pos[dog]) / j[dog];
		solve(i);
	}
}

int main () {
	ios::sync_with_stdio(0);cin.tie(0);

	cin >> n >> m;
	for(int i = 0; i < m; i++) {
		dp[i] = INT_MAX;
	}

	for(int i = 0; i < m; i++) {
		int x, y;
		cin >> x >> y;
		j[i] = y;
		pos[i] = x;
		v.pb({x,y});
	}
	dp[0] = 0;
	solve(0);
	if(dp[1] == INT_MAX) dp[1] = -1;
	cout << dp[1] <<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...