제출 #1106201

#제출 시각아이디문제언어결과실행 시간메모리
1106201alexddThe short shank; Redemption (BOI21_prison)C++17
15 / 100
2098 ms10832 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; int n,d,lim; int t[2000005]; bool blocat[2000005]; int tole[2000005]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>d>>lim; for(int i=1;i<=n;i++) { cin>>t[i]; tole[i] = n+1; for(int j=i;j>0;j--) { if(t[j] + (i-j) <= lim) { tole[i] = j; break; } } } for(int pas=1;pas<=d;pas++) { int mxm=0,unde=-1; for(int i=1;i<=n;i++) { int cnt=0; for(int j=i+1;j<=n;j++) if(tole[j]<=i) cnt++; if(cnt>mxm) { mxm = cnt; unde = i; } } if(unde==-1) break; blocat[unde]=1; for(int i=unde+1;i<=n;i++) { if(tole[i]<=unde) { tole[i] = n+1; } } } int rez=0; int mnm=INF; for(int i=1;i<=n;i++) { if(blocat[i-1]) mnm=INF; mnm = min(mnm, t[i]-i); if(mnm <= lim-i) rez++; /*for(int j=i;j>0;j--) { if(t[j] - j <= lim - i) { rez++; break; } if(blocat[j-1]) break; }*/ } cout<<rez; return 0; } /* pentru fiecare pozitie i ne intereseaza doar cea mai din dreapta pozitie j aflata in stanga ei care respecta j <= i t[j] + (i-j) <= lim t[j] - j <= lim - i */
#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...