Submission #676879

#TimeUsernameProblemLanguageResultExecution timeMemory
676879ArnchJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
811 ms26700 KiB
// oooo
/*
 har chi delet mikhad bebar ~
 gitar o ba khodet nabar! ~
 ;Amoo_Hasan;
*/

/*
	link:	
*/

#include<iostream>
#include<vector>
#include<set>
#include<queue>
#pragma GCC optimize("O3,no-stack-protector,unroll-loops")
#pragma GCC target("avx2,fma")

using namespace std;

typedef long long ll;
typedef long double ld;

#define Sz(x) int((x).size())
#define All(x) (x).begin(), (x).end()
#define wtf(x) cout<<#x <<" : " <<x <<endl
#define mak make_pair

//constexpr int PRI = 1000696969;
constexpr int INF = 1e9, N = 1e6 + 10, MOD = 1e9 + 7;

int b[N], x[N];
int d[N];
vector<int> vc[N];

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

	int n, m; cin >>n >>m;
	for(int i = 0; i < m; i++) {
		cin >>b[i] >>x[i];
		vc[b[i]].push_back(i);
	}
	
	for(int i = 0; i < n; i++) d[i] = INF;

	d[b[0]] = 0;
	priority_queue<pair<int, int> > st;
	st.push({0, b[0]});

	while(!st.empty()) {
		int q = -st.top().first, p = st.top().second;
		st.pop();
		if(d[p] != q) continue;

		if(p == b[1]) {
			return cout<<d[p], 0;
		}
		
		for(auto j : vc[p]) {
			for(int cnt = 1; p + cnt * x[j] < n; cnt++) {
				int pq = p + cnt * x[j];
				if(d[p] + cnt < d[pq]) {
					d[pq] = d[p] + cnt;
					st.push({-d[pq], pq});
				}
			}
			for(int cnt = 1; p - cnt * x[j] >= 0; cnt++) {
				int pq = p - cnt * x[j];
				if(d[p] + cnt < d[pq]) {
					d[pq] = d[p] + cnt;
					st.push({-d[pq], pq});
				}
			}
		}
	}

	cout<<-1;
	
	return 0;
}


#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...