제출 #1164805

#제출 시각아이디문제언어결과실행 시간메모리
1164805MuhammadSaramRabbit Carrot (LMIO19_triusis)C++20
0 / 100
1099 ms138112 KiB
#include <bits/stdc++.h> using namespace std; signed main() { int n,R; cin>>n>>R; int a[n]; for (int i=0;i<n;i++) cin>>a[i]; vector<int> v={0}; for (int i=0;i<n;i++) { v.push_back(i*R+R); for (int j=i-1;j>=0;j--) v.push_back(a[j]+(i-j)*R); if (a[i]>=R) v.push_back(a[i]-R); } sort(v.begin(),v.end()); v.resize(unique(v.begin(),v.end())-begin(v)); if (v.empty()) v={0}; int m=v.size(); int dp[2][m],l[m]; for (int i=0;i<m;i++) for (int j=i;j>=0;j--) if (v[i]-v[j]<=R) l[i]=j; int x=lower_bound(v.begin(),v.end(),R)-begin(v),y=lower_bound(v.begin(),v.end(),a[0])-begin(v); for (int i=0;i<m;i++) dp[0][i]=n+1; dp[0][x]=1; if (a[0]<=R) dp[0][y]=0; for (int i=1;i<n;i++) { int suf[m];suf[m-1]=dp[1-i%2][m-1]; for (int j=m-2;j>=0;j--) suf[j]=min(suf[j+1],dp[1-i%2][j]); for (int j=0;j<m;j++) dp[i%2][j]=suf[l[j]]+(a[i]!=v[j]); } int ans=dp[1-n%2][0]; for (int i=1;i<m;i++) ans=min(ans,dp[1-n%2][i]); cout<<ans<<endl; 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...