Submission #1152764

#TimeUsernameProblemLanguageResultExecution timeMemory
1152764irmuunMarathon Race 2 (JOI24_ho_t3)C++20
100 / 100
134 ms33424 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() void chmin(ll &a,ll b){a=min(a,b);} void chmax(ll &a,ll b){a=max(a,b);} int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,L; cin>>n>>L; ll x[n+5]; for(ll i=1;i<=n;i++){ cin>>x[i]; } sort(x+1,x+n+1); ll m=0; ll X[n+5],cnt[n+5]; x[0]=-1; for(ll i=1;i<=n;i++){ if(x[i]!=x[i-1]){ X[++m]=x[i]; cnt[m]=1; } else{ cnt[m]++; } } if(m>1000){ ll q; cin>>q; while(q--){ ll s,g,t; cin>>s>>g>>t; cout<<"No\n"; } return 0; } vector<ll>v,u; for(ll i=1;i<=m;i++){ v.pb(X[i]); u.pb(X[i]); } reverse(all(u)); ll pre[m+5],suf[m+5]; pre[0]=0; suf[0]=0; for(ll i=1;i<=m;i++){ pre[i]=pre[i-1]+cnt[i]; } reverse(cnt+1,cnt+m+1); for(ll i=1;i<=m;i++){ suf[i]=suf[i-1]+cnt[i]; } reverse(cnt+1,cnt+m+1); ll dp[2][m+5][m+5][2]; for(ll k=0;k<2;k++){ for(ll i=0;i<=m;i++){ for(ll j=0;j<=m;j++){ dp[k][i][j][0]=dp[k][i][j][1]=(ll)1e18; } } if(k==0) dp[k][1][0][0]=0; else dp[k][0][1][1]=0; for(ll i=0;i<=(ll)v.size();i++){ for(ll j=0;j<=(ll)u.size();j++){ if(i<(ll)v.size()){ ll pos=(i==0?v[i]:v[i-1]); chmin(dp[k][i+1][j][0],dp[k][i][j][0]+abs(v[i]-pos)*(pre[i]+suf[j]+1)); pos=(j==0?u[j]:u[j-1]); chmin(dp[k][i+1][j][0],dp[k][i][j][1]+abs(v[i]-pos)*(pre[i]+suf[j]+1)); } if(j<(ll)u.size()){ ll pos=(i==0?v[i]:v[i-1]); chmin(dp[k][i][j+1][1],dp[k][i][j][0]+abs(u[j]-pos)*(pre[i]+suf[j]+1)); pos=(j==0?u[j]:u[j-1]); chmin(dp[k][i][j+1][1],dp[k][i][j][1]+abs(u[j]-pos)*(pre[i]+suf[j]+1)); } } } } ll q; cin>>q; while(q--){ ll s,g,t; cin>>s>>g>>t; ll L=upper_bound(X+1,X+m+1,g)-X-1;//# of left is l ll R=m-L; //k=0 start from left, k=1 start from right ll ans=(ll)1e18; if(L>0) chmin(ans,dp[0][L][R][0]+abs(s-X[1])+abs(g-X[L])*(n+1)); if(R>0) chmin(ans,dp[1][L][R][1]+abs(s-X[m])+abs(g-X[L+1])*(n+1)); if(L>0&&R>0){ chmin(ans,dp[0][L][R][1]+abs(s-X[1])+abs(g-X[L+1])*(n+1)); chmin(ans,dp[1][L][R][0]+abs(s-X[m])+abs(g-X[L])*(n+1)); } //add N ans+=n; if(ans<=t){ cout<<"Yes\n"; } else{ cout<<"No\n"; } } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...