Submission #1177100

#TimeUsernameProblemLanguageResultExecution timeMemory
1177100AgageldiJakarta Skyscrapers (APIO15_skyscraper)C++20
0 / 100
1 ms1864 KiB
#include "bits/stdc++.h" using namespace std; #define N 30005 #define ll long long #define ff first #define ss second #define pb push_back #define SZ(v) (int)v.size() int n, m, ans = INT_MAX, vis[N], j[N], dp[300001], pos[300001]; vector <int> v[N], v1[N]; void solve(int dog) { if(abs(pos[dog] - pos[1]) % j[dog] == 0){ dp[pos[1]] = min(dp[pos[1]], dp[pos[dog]] + abs(pos[dog] - pos[1]) / j[dog]); return; } if(vis[dog]) return; vis[dog] = 1; for(auto i : v[dog]) { if(dp[i] < dp[pos[dog]] + abs(i - pos[dog]) / j[dog]){ dp[i] = dp[pos[dog]] + abs(i - pos[dog]) / j[dog]; for(auto k : v1[i]) { solve(k); } } } } int main () { ios::sync_with_stdio(0);cin.tie(0); cin >> n >> m; for(int i = 0; i < n; i++) { dp[i] = INT_MAX; } for(int i = 0; i < m; i++) { int x, y; cin >> x >> y; int k = 1; pos[i] = x; v[i].pb(x); v1[x].pb(i); while(x - k * y > 0 || x + k * y <= n) { if(x - k * y > 0) v[i].pb(x - k * y); if(x + k * y <= n)v[i].pb(x + k * y); k++; } j[i] = y; } dp[pos[0]] = 0; solve(0); if(dp[pos[1]] == INT_MAX) dp[pos[1]] = -1; cout << dp[pos[1]] <<'\n'; }
#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...