Submission #739451

#TimeUsernameProblemLanguageResultExecution timeMemory
739451MauveJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1090 ms215292 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define ll int
#define ss second
#define ff first
#define INF 2000000000000000
#define pb push_back
#define edge pair<ll, pair<ll,ll> > // une, number ,power
#define cost first
#define num second.first
#define pwr second.second
ll n,m,l,r,i,j,ii,jj,k,x,y,D[30001][177],s,e;
vector< edge > v[30001][177];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n>>m;
    for(i=1;i<=m;i++){
        cin>>l>>r;
        if(i==1) s=l;
        if(i==2) e=l;
        if(r>175)
            for(j=1 ; l+r*j<n || l-r*j>=0 ; j++){
                edge a;
                a.num=l+r*j;
                a.pwr=176;
                a.cost=j;
                if(a.num<n) v[l][176].pb(a);
                a.num=l-r*j;
                if(a.num>=0) v[l][176].pb(a);
            }
        else{
            v[l][176].pb({0,{l,r}});
        }
    }
    priority_queue<edge , vector< edge >, greater< edge > > q;
    memset(D,-1,sizeof(D));
    q.push({0,{s,176}});
    while(!q.empty()){
        ll une, nmbr, power;
        une=q.top().cost;
        nmbr=q.top().num;
        power=q.top().pwr;
        if(nmbr==e){
            cout<<une;
            return 0;
        }
        q.pop();
        if(D[nmbr][power]!=-1);
        else{
        D[nmbr][power]=une;
        for(edge no : v[nmbr][power]) q.push({une+no.cost,{no.num,no.pwr}});
        if(power!=176){
            q.push({une,{nmbr,176}});
            if(nmbr+power<n) q.push({une+1,{nmbr+power,power}});
            if(nmbr-power>=0) q.push({une+1,{nmbr-power,power}});
        }
        }
    }
    cout<<D[e][200];
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:65:19: warning: array subscript 200 is above array bounds of 'int [177]' [-Warray-bounds]
   65 |     cout<<D[e][200];
      |                   ^
#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...