This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
# include <bits/stdc++.h>
using namespace std;
const int N = 2000;
int n, m, b[N], p[N], d[N][N], dis[N];
vector < pair <int, int> > g[N];
int main(){
cin >> n >> m;
for(int i = 0; i < N; i ++){
dis[i] = 1e9;
for(int j = 0; j < N; j ++)
d[i][j] = 1e9;
}
if(n > N || m > N) return 0;
for(int i = 1; i <= m; i ++){
cin >> b[i] >> p[i];
d[i][b[i]] = 0;
for(int j = b[i]; j + p[i] < n; j += p[i])
d[i][j + p[i]] = d[i][j] + 1;
for(int j = b[i]; j - p[i] >= 0; j -= p[i])
d[i][j - p[i]] = d[i][j] + 1;
}
for(int i = 1; i <= m; i ++){
for(int j = 1; j <= m; j ++){
if(j == i) continue;
if(d[i][b[j]] != 1e9){
g[i].push_back({d[i][b[j]], j});
}
}
}
set < pair <int, int> > st;
dis[1] = 0;
st.insert({-1e9, 1});
while(!st.empty()){
int v = st.begin()->second;
st.erase(st.begin());
for(int i = 0; i < g[v].size(); i ++){
int to = g[v][i].second, len = g[v][i].first;
if(dis[to] > dis[v] + len){
st.erase({dis[to], to});
dis[to] = dis[v] + len;
st.insert({dis[to], to});
}
}
}
if(dis[2] == 1e9)
cout << -1 << endl;
else
cout << dis[2] << endl;
}
/**
5 3
0 2
1 1
4 1
**/
Compilation message (stderr)
skyscraper.cpp: In function 'int main()':
skyscraper.cpp:46:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i < g[v].size(); i ++){
~~^~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |