Submission #1013884

#TimeUsernameProblemLanguageResultExecution timeMemory
1013884snpmrnhlolSemiexpress (JOI17_semiexpress)C++17
100 / 100
97 ms604 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll N = 3e3; ll v[N]; ll v2[N]; ll n,m,k,a,b,c,t; ll get(ll pos){ ll l = 0,r = m - 1; while(l != r){ ll mij = (l + r + 1)/2; if(pos < v[mij]){ r = mij - 1; }else{ l = mij; } } return v[l]; } int main(){ cin>>n>>m>>k; cin>>a>>b>>c; cin>>t; k-=m; for(ll i = 0;i < m;i++){ cin>>v[i]; v2[i] = v[i]; v[i]--; v2[i]--; } ll k2 = m; for(ll i = 0;i < k;i++){ ll poscand = 0,nrcand = -1; for(ll i = 0;i < k2 - 1;i++){ ///find first bad ll pos = get(v2[i]); ll nxt = v2[i] + (t - pos*b - (v2[i] - pos)*c)/a; if(v2[i + 1] <= nxt - 1 || t - pos*b - (v2[i] - pos)*c < 0 || t - pos*b - (nxt + 1 - pos)*c < 0)continue; ll nxt2 = min(nxt + 1 + (t - pos*b - (nxt + 1 - pos)*c)/a,v2[i + 1] - 1); ///[nxt + 1,nxt2] if(nrcand < nxt2 - nxt){ nrcand = nxt2 - nxt; poscand = nxt + 1; } } if(nrcand == -1)break; v2[k2++] = poscand; sort(v2,v2 + k2); } ll ans = 0; for(ll i = 0;i < k2 - 1;i++){ ///find first bad ll pos = get(v2[i]); ll nxt = v2[i] + (t - pos*b - (v2[i] - pos)*c)/a; if(t - pos*b - (v2[i] - pos)*c < 0)continue; ans+=min(v2[i + 1] - 1,nxt) - v2[i] + 1; //cout<<"segment:"<<v2[i]<<' '<<v2[i + 1] - 1<<' '<<nxt<<'\n'; } if(b*v2[k2 - 1] <= t){ ans++; } /*for(ll i = 0;i < k2;i++){ cout<<v2[i]<<' '; } cout<<'\n';*/ cout<<ans - 1<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...