제출 #1197477

#제출 시각아이디문제언어결과실행 시간메모리
1197477TahirAliyevJakarta Skyscrapers (APIO15_skyscraper)C++20
22 / 100
6 ms3656 KiB
#include <bits/stdc++.h>
 
// #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define int long long
#define pii pair<int, int>
#define ld long double
#define all(v) v.begin(), v.end()
using namespace std;
const int oo = 1e18 + 9;
const int MAX = 3e4 + 6;
int MOD = 998244353;

int n, m;
map<int, int> dp[MAX];
vector<int> arr[MAX];
pii d0, d1;
int rec(int i, int p){
    if(d1.first == i) return 0;
    if(dp[i].count(p)) return dp[i][p];
    dp[i][p] = oo;
    int ans = oo;
    for(int a : arr[i]) ans = min(ans, rec(i, a));
    if(i - p >= 0) ans = min(ans, rec(i - p, p) + 1);
    if(i + p < n) ans = min(ans, rec(i + p, p) + 1);
    return dp[i][p] = ans;
}

void solve(){
    cin >> n >> m;
    for(int i = 0; i < m; i++){
        int x, p; cin >> x >> p;
        if(!i) d0 = {x, p};
        if(i==1) d1 = {x, p};
        arr[x].push_back(p);
    }    
    int ans = rec(d0.first, d0.second); 
    if(ans == oo) ans = -1;
    cout << ans << '\n';
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) solve();
}
#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...