제출 #1323565

#제출 시각아이디문제언어결과실행 시간메모리
1323565raqin_shahrierJakarta Skyscrapers (APIO15_skyscraper)C++20
10 / 100
1 ms332 KiB
#include<bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp> 
using namespace std;
// #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
// using namespace __gnu_pbds;
 
typedef long long ll;
 
#define int long long
 
#define vi vector<int>
#define vvi vector<vi>
#define vll vector<ll>
#define vvll vector<vll>
#define pi pair<int,int>
#define pll pair<ll,ll>
#define ff first
#define ss second
#define vpi vector<pair<int,int>>
#define rep(ii,st, n) for(int ii=st; ii<n; ii++)
#define gp " "

//bit_manupulation
#define checkbit(x,n) (x&(1LL<<n))
#define setbit(x,n) (x=(x|(1LL<<n)))
#define resetbit(x,n) (x=(x&(~(1LL<<n))))
#define pow2(i) (1LL<<i)
#define bitcnt(x) ((sizeof(x) <= sizeof(int)) ? (32 - __builtin_clz(x)) : (64 - __builtin_clzll(x)))

// #define DEBG

#define debug(n)
#define debugc(a)
#define debugcc(a)
#ifdef DEBG
#define debug(n) cout<<__LINE__<<gp<<#n<<gp<<n<<endl;
#define debugc(a) cout<<__LINE__<<gp<<#a<<gp<<'['<<gp;for(auto el:a){cout<<el<<gp;}cout<<']'<<endl;
#define debugcc(a) cout<<__LINE__<<gp<<#a<<gp<<'['<<gp;for(auto el:a){cout<<'{'<<gp<<el.ff<<','<<el.ss<<gp<<'}'<<gp;}cout<<']'<<endl;
#endif

#define fastcin() ios_base::sync_with_stdio(false); cin.tie(NULL);
// #define endl '\n'


#define All(a) a.begin(),a.end()
template<typename T> void get_vector(T&a){for(auto&e:a)cin>>e;}
template<typename T> void put_vector(T a){for(auto e:a)cout<<e<<" ";cout<<endl;}


const ll INF = 2e18;
const ll inf = 1e18;
const ll M = 1e5+7;
const ll N = 1e5+7;
const ll modinvof2 = 500000004;


//==============================CODE STARTS HERE==============================//
int n,m;
vi b,p;
map<int,set<int>>mp;


vector<bool>mark;
// const long long inf = 1e18;

struct Node{
    long long  at;
    long long cost;
};

bool operator<(Node A, Node B){  
    return A.cost>B.cost;  // The node with higher cost is defined as smaller
}

struct edge{
    long long at;
    long long cost;
    edge(pair<int,int> p){
      at = p.ff;
      cost = p.ss;
    }
};

vector<long long> distance(vector<vector<edge>>G,int source){


    priority_queue<Node>Q;
    vector<long long>distance(G.size(),inf);
 
    Q.push({source,0});
    distance[source] = 0;

    while(!Q.empty()){
        Node u = Q.top();
        Q.pop();

        if(mark[u.at])continue;
        mark[u.at] = 1;

        for(auto v:G[u.at]){
            if(distance[v.at]>distance[u.at]+v.cost){
                distance[v.at] = distance[u.at]+v.cost;
                Q.push({v.at,distance[v.at]});
            }
        }

    }
    return distance;
}

vector<vector<edge>>g;

void preprocessing(){

}

void solve(int testcases){
    cin>>n>>m;
    // exit(0);
    b.resize(m+7); p.resize(m+7);
    for(int i = 0; i<m; i++){
      cin>>b[i]>>p[i];
      mp[b[i]].insert(p[i]);
    }
    // exit(0);
    g.resize(n+7);
    mark.resize(n+7);
    
    
    // exit(0);
    for(int i = 0; i<n; i++){
      for(auto& el: mp[i]){
        int k = 1;
        for(int j = i+el; j<n; j+=el){
          
          g[i].push_back(make_pair(j, k));
          k++;
        }
        k=1;
        for(int j = i-el; j>=0; j-=el){
          g[i].push_back(make_pair(j, k));
          k++;
        }
      }
    }
    vector<long long>res = distance(g,0);
    debugc(res)
    // exit(0);
    
    int ans = res[b[1]];
    if(ans == inf){
      cout<<-1<<endl;
      return;
    }
    cout<<ans<<endl;

}

int32_t main(){
    // fastcin();

    int t=1;
    // cin>>t;
    preprocessing();
    rep(i,1,t+1){
       solve(i);
    }
    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...