This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> pii;
typedef pair<ll, ll> pll;
#define ff first
#define ss second
ll ttt;
const ll INF=1e18;
const ll MOD=1e9+7;
const ll N=5007;
ll n,m,k;
ll a,b,c;
ll t;
vector<ll>s;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("Binput.txt","r",stdin);
// freopen("Boutput.txt","w",stdout);
cin>>n>>m>>k;
cin>>a>>b>>c;
cin>>t;
for(ll i=0;i<m;i++){
ll x;
cin>>x;
s.push_back(x);
}
ll ans=0;
ll cur=0;
priority_queue<pair<ll,ll>>q;
for(ll i=0;i<m-1;i++){
if(cur>t)break;
ll cnt=(t-cur)/a+1;
if(cnt<s[i+1]-s[i]){
ans+=cnt;
ll pos=s[i]+cnt;
ll rem=t-cur-cnt*c;
if(rem>=0){
ll cnt2=rem/a+1;
if(cnt2+pos<s[i+1]){
q.push({cnt2,pos});
}
else{
q.push({s[i+1]-pos,pos});
}
}
}
else{
ans+=s[i+1]-s[i];
}
cur+=(s[i+1]-s[i])*b;
}
if(cur<=t){
ans++;
}
k-=m;
while(!q.empty()&&k>0){
ll cnt=q.top().ff;
ll pos=q.top().ss;
// cout<<cnt<<" "<<pos<<endl;
q.pop();
ans+=cnt;
auto it=lower_bound(s.begin(),s.end(),pos+cnt);
if((*it)>pos+cnt){
ll newpos=pos+cnt;
--it;
ll rem=t-((*it)-1)*b-(newpos-(*it))*c;
if(rem>=0){
ll cnt2=rem/a+1;
++it;
if(cnt2+pos<(*it)){
q.push({cnt2,newpos});
}
else{
q.push({(*it)-newpos,newpos});
}
}
}
k--;
}
cout<<ans-1<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |