이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
vector<int> nbJumps;
vector<vector<int>> jump_count;
int main () {
int nbSky, nbDoge;
cin >> nbSky >> nbDoge;
nbJumps.resize(nbSky, -1);
jump_count.resize(nbSky);
int sx = 0;
int ex = 0;
for (int idDoge = 0; idDoge < nbDoge; idDoge ++) {
int x, p;
cin >> x >> p;
if (idDoge == 0) sx = x;
if (idDoge == 1) ex = x;
jump_count[x].push_back(p);
}
set<pair<int, int>> mp;
nbJumps [sx] = 0;
mp.insert({ 0, sx });
while (mp.size() != 0) {
pair<int, int> mu = * mp.begin();
mp.erase(mu);
int curx = mu.second;
if (curx == ex) break ;
for (int jump : jump_count[curx]) {
int i = 1;
for (int nx = curx - jump; nx >= 0; nx -= jump) {
if (nbJumps[nx] == -1 || nbJumps[nx] > nbJumps[curx] + i) {
if (nbJumps[nx] != -1)
mp.erase({ nbJumps[nx], nx });
nbJumps[nx] = nbJumps[curx] + i;
mp.insert({ nbJumps[nx], nx });
}
i ++;
}
i = 1;
for (int nx = curx + jump; nx < nbSky; nx += jump) {
if (nbJumps[nx] == -1 || nbJumps[nx] > nbJumps[curx] + i) {
if (nbJumps[nx] != -1)
mp.erase({ nbJumps[nx], nx });
nbJumps[nx] = nbJumps[curx] + i;
mp.insert({ nbJumps[nx], nx });
}
i ++;
}
}
}
cout << nbJumps[ex];
}
# | 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... |