Submission #361472

#TimeUsernameProblemLanguageResultExecution timeMemory
361472alireza_kavianiJakarta Skyscrapers (APIO15_skyscraper)C++11
100 / 100
551 ms134380 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef pair<int, int> pii; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define SZ(x) ll(x.size()) const ll MAXN = 3e4 + 10; const ll SQ = 200; const ll LOG = 22; const ll INF = 8e18; const ll MOD = 1e9 + 7; //998244353; //1e9 + 9; int n , m , ptr; int q[MAXN * SQ * 4] , dist[MAXN * SQ * 2] , pos[MAXN * SQ * 2] , len[MAXN * SQ * 2]; vector<int> adj[MAXN]; void BFS(int v){ fill(dist , dist + MAXN * SQ * 2 , MOD); dist[v] = 0; int ql = MAXN * SQ * 2 , qr = ql; q[qr++] = v; while(ql < qr){ int v = q[ql++]; if(v < n){ for(int u : adj[v]){ if(dist[u] > dist[v]){ dist[u] = dist[v]; q[--ql] = u; } } continue; } if(dist[pos[v]] > dist[v]){ dist[pos[v]] = dist[v]; q[--ql] = pos[v]; } if(v < n + m) continue; for(int i = -1 ; i <= 1 ; i += 2){ int u = v + i * (len[v] < 0 ? -1 : len[v]) , p = pos[v] + i * len[v]; if(p < 0 || p >= n) continue; if(dist[u] > dist[v] + 1){ dist[u] = dist[v] + 1; q[qr++] = u; } } } } int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin >> n >> m; ptr = n + m; for(int i = 1 ; i < SQ ; i++){ for(int j = 0 ; j < n ; j++){ pos[ptr + j] = j; len[ptr + j] = i; } ptr += n; } for(int i = 0 ; i < m ; i++){ int x , y; cin >> x >> y; adj[x].push_back(n + i); if(y < SQ){ pos[n + i] = m + n * y + x; continue; } int z = x % y; for(int j = z ; j < n ; j += y){ pos[ptr] = j; len[ptr] = -y; if(j == x){ pos[n + i] = ptr; } ptr++; } } BFS(n); cout << (dist[n + 1] == MOD ? -1 : dist[n + 1]) << endl; 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...