이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <set>
#include <ctime>
#include <deque>
#include <vector>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
int N, M, B[30009], P[30009], dist[7500000], sep[7500000]; pair<int, int> e[22500000], ea[22500000], eb[30009];
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
cin >> N >> M;
for(int i = 0; i < M; ++i) {
cin >> B[i] >> P[i];
}
int sum = 0;
set<pair<int, int> > s;
for(int i = 0; i < M; ++i) {
pair<int, int> u = make_pair(B[i] % P[i], P[i]);
if(s.find(u) == s.end()) {
sum += ((N - 1) - B[i] % P[i] + P[i]) / P[i];
s.insert(u);
}
}
unordered_map<int, int> d;
int cnt = N, eac = 0, ebc = 0;
for(pair<int, int> i : s) {
for(int j = i.first; j < N; j += i.second) {
d[i.second * N + j] = cnt;
if(j != i.first) {
ea[eac++] = make_pair(cnt - 1, cnt);
ea[eac++] = make_pair(cnt, cnt - 1);
}
ea[eac++] = make_pair(cnt, j);
++cnt;
}
}
for(int i = 0; i < M; ++i) {
eb[ebc++] = make_pair(B[i], d[P[i] * N + B[i]]);
}
merge(ea, ea + eac, eb, eb + ebc, e);
int E = eac + ebc;
for(int i = 0; i < E; ++i) {
sep[e[i].first + 1] = i + 1;
}
for(int i = 1; i <= sum; ++i) {
sep[i] = max(sep[i], sep[i - 1]);
}
fill(dist, dist + N + sum, -1);
dist[B[0]] = 0;
deque<int> que; que.push_back(B[0]);
while(!que.empty()) {
int u = que.front(); que.pop_front();
for(int i = sep[u]; i < sep[u + 1]; ++i) {
int tar = e[i].second;
if(dist[tar] != -1) continue;
if(u < N || tar < N) dist[tar] = dist[u], que.push_front(tar);
else dist[tar] = dist[u] + 1, que.push_back(tar);
}
}
cout << dist[B[1]] << endl;
return 0;
}
# | 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... |