제출 #552946

#제출 시각아이디문제언어결과실행 시간메모리
552946ala2Jakarta Skyscrapers (APIO15_skyscraper)C++14
0 / 100
38 ms70768 KiB
#include <bits/stdc++.h>
#define int long long
#define F first
#define S second
#define pb push_back
#define B begin()
#define E end()

using namespace std;
int a[1001000];
int b[1001000];  int n,m;
vector<pair<int,int>>v[1001000];
vector<pair<int,int>>w[1000010];
vector<int>no[1000100];
int f(int i,int j,int l,int r,int T)

{
    //cout<<"    "<<i<<"  "<<j<<"  "<<l<<"  "<<r<<endl;
    if(T>m)
        return 0;
    if(j==a[2])
    {
        return 0;
    }
    int mn=1e17;
    for(auto k:no[j])
    {
        if(k!=i)
        mn=min(mn,f(k,j,0,0,T+1));
    }
    int g=0;
    if(r==0){
    for(int k=j+b[i];k<=n;k+=b[i])
    {
        g++;
        mn=min(mn, f(i,k,1,0,T+1) )+g;
    }
    }
    g=0;
    if(l==0){
    for(int k=j-b[i];k>=0;k-=b[i])
    {
        g++;
        mn=min(mn,f(i,k,0,1,T+1) )+g;
    }
    }
    return mn;

}
signed main()
{

    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {

        cin>>a[i]>>b[i];
        no[a[i]].pb(i);
        v[i].pb({ a[i], 0 });
        int g=0;
        w[a[i]].pb( {i,0 } );
        for(int j=a[i]-b[i];j>=0;j-=b[i])
        {
            g++;
            w[j].pb({ i,g });
            v[i].pb({ j,g });
        }
        g=0;
        for(int j=a[i]+b[i];j<=n;j+=b[i])
        {
            g++;
            w[j].pb({ i,g });
            v[i].pb({ j,g });
        }
        sort(v[i].B,v[i].E);

    }
    /*
    for(int i=1;i<=m;i++)
    {
        cout<<"       "<<i<<"  :  ";
        for(auto j:v[i])
        cout<<"( "<<j.F<<", "<<j.S<<")"<<"  ";
        cout<<endl;
    }
    */
    cout<<f(1,a[1],0,0,0)<<endl;


}
//dp[i][j]= min jums to reach rock a[2] if the news in doge i and in rock j
#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...