Submission #41671

#TimeUsernameProblemLanguageResultExecution timeMemory
41671repeatingJakarta Skyscrapers (APIO15_skyscraper)C++11
0 / 100
44 ms48496 KiB
#include <bits/stdc++.h> #define F first #define S second #define P push #define pb push_back #define MEM(dp,i) memset(dp,i,sizeof(dp)) #define W while #define R return #define C continue #define SI size() #define ll long long #define ld long double #define pll pair<ll,ll> #define pii pair<int,int> #define SF(x) scanf("%Id",&x) #define SF2(x,y) scanf("%Id%Id",&x,&y) #define SF3(x,y,z) scanf("%I64d%I64d%I64d",&x,&y,&z) #define SF4(x,y,z,o) scanf("%I64d%I64d%I64d%I64d",&x,&y,&z,&o) #define all(v) v.begin(),v.end() using namespace std; const long long INF = 1e9; const long long MOD = 1e9+7; const int MX=30015; int n,m; int xx[MX],y[MX]; const int sq=2001; ll dp[3005][2004]; vector<int> v[MX]; ll DP(int x,int j){ if(x<0||x>=n)R INF; // cout<<x<<" "<<j<<endl; if(x==xx[1])R 0; ll &ret=dp[x][j]; if(ret!=-1)R ret; ret=INF; if(j==0) for(auto i : v[x]) if(i<sq){ret=min(ret,DP(x,i));} if(j!=0) ret=min(ret,DP(x+j,j)+1),ret=min(ret,DP(x-j,j)+1); ret=min(ret,DP(x,0)); if(j==0) for(auto k : v[x]){ if(k>=sq){ for(int i=x,j1=0;i>=0;i-=k,j1++){ ret=min(ret,DP(i,0)+j1); } for(int i=x,j1=0;i<n;i+=k,j1++){ ret=min(ret,DP(i,0)+j1); } } } // cout<<x<<" "<<j<<" "<<ret<<endl; R ret; } int main(){ MEM(dp,-1); cin>>n>>m; for(int i=0;i<m;i++){ cin>>xx[i]>>y[i]; v[xx[i]].pb(y[i]); } if(DP(xx[0],0)==INF)cout<<0; else cout<<DP(xx[0],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...