Submission #1178319

#TimeUsernameProblemLanguageResultExecution timeMemory
1178319biankMarathon Race 2 (JOI24_ho_t3)C++20
52 / 100
4 ms5644 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define fst first #define snd second #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<ll> vll; typedef vector<int> vi; typedef pair<int,int> ii; const ll INF=1e18; void chmin(ll &x, ll v){ if(x>v) x=v; } const int N=2006; ll dp[N][N][2][2]; int main(){ ios::sync_with_stdio(0); cin.tie(0); int n,l; cin>>n>>l; vll X(n); forn(i,n) cin>>X[i]; sort(all(X)); vll x,c; forn(i,n){ if(i==0||X[i]!=X[i-1]) x.pb(X[i]),c.pb(1); else c.back()++; } n=sz(x); int q; cin>>q; if(n*(n+1LL)/2>50000){ forn(_,q) cout<<"No\n"; return 0; } vector<vll> cant(n+1,vll(n+1,0)); forn(i,n) cant[i+1][0]=cant[i][0]+c[i]; forn(i,n+1) forn(j,n) cant[i][j+1]=cant[i][j]+c[n-j-1]; forn(i,n+1) forn(j,n+1) forn(a,2) forn(b,2) dp[i][j][a][b]=INF; dp[1][0][0][0]=c[0],dp[0][1][1][1]=c[n-1]; forn(i,n+1) forn(j,n+1) forn(k,2) forn(t,2){ if(k==0&&i==0) continue; if(k==1&&j==0) continue; ll pos=k==0?x[i-1]:x[n-j]; if(i<n) chmin(dp[i+1][j][0][t],dp[i][j][k][t]+(cant[i][j]+1LL)*abs(x[i]-pos)+c[i]); if(j<n) chmin(dp[i][j+1][1][t],dp[i][j][k][t]+(cant[i][j]+1LL)*abs(x[n-j-1]-pos)+c[n-j-1]); } forn(_,q){ int s,g,t; cin>>s>>g>>t; int left=int(lower_bound(all(x),g)-begin(x)); int right=n-left; ll res=INF; if(left){ chmin(res,dp[left][right][0][0]+abs(s-x[0])+(cant[n][0]+1LL)*abs(g-x[left-1])); } if(right){ chmin(res,dp[left][right][1][1]+abs(s-x[n-1])+(cant[n][0]+1LL)*abs(g-x[n-right])); } if(left&&right){ chmin(res,dp[left][right][1][0]+abs(s-x[0])+(cant[n][0]+1LL)*abs(g-x[n-right])); chmin(res,dp[left][right][0][1]+abs(s-x[n-1])+(cant[n][0]+1LL)*abs(g-x[left-1])); } if(res<=t) cout<<"Yes\n"; else cout<<"No\n"; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...