Submission #95539

#TimeUsernameProblemLanguageResultExecution timeMemory
95539MohamedAhmed0Jakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
438 ms9360 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2010 , MAXM = 30010;
int visited[MAXN] ;
pair<int , int>arr[MAXM] ;
vector< vector<int> >now(MAXN) ;

int main()
{
    int n , m ;
    cin>>n>>m ;
    for(int i = 0 ; i < m ; ++i)
    {
        cin>>arr[i].first>>arr[i].second;
        now[arr[i].first].push_back(i);
    }
    priority_queue< pair<int , int> , vector< pair<int , int> > , greater< pair<int , int> > >q ;
    q.push({0 , arr[0].first});
    while(!q.empty())
    {
        pair<int , int>p = q.top() ;
        q.pop() ;
        int dist = p.first , idx = p.second ;
        if(idx == arr[1].first)
            return cout<<dist<<"\n" , 0 ;
        if(visited[idx])
            continue;
        visited[idx] = 1 ;
        for(auto &i : now[idx])
        {
            int cnt = 0 ;
            for(int j = idx+arr[i].second ; j < n ; j += arr[i].second)
            {
                cnt++ ;
                if(!visited[j])
                   q.push({dist + cnt , j});
            }
            cnt = 0 ;
            for(int j = idx - arr[i].second ; j >= 0 ; j -= arr[i].second)
            {
                cnt++;
                if(!visited[j])
                   q.push({dist + cnt , j});
            }
        }
    }
    return cout<<-1<<"\n" , 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...