Submission #1177952

#TimeUsernameProblemLanguageResultExecution timeMemory
1177952TsaganaSemiexpress (JOI17_semiexpress)C++20
100 / 100
10 ms4536 KiB
#include<bits/stdc++.h>

#define IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie();
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define int long long
#define pq priority_queue
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define pp pop_back
#define F first
#define S second

using namespace std;

int n, m, k, a, b, c, t;
int v[3010];
vector<int> st;
int ans;

void read() {
	cin >> n >> m >> k >> a >> b >> c >> t;
	for(int i = 0; i < m; i++) cin >> v[i];
	k -= m;
	v[m] = n + 1;
}

bool check(int i) {
	int time = t - (v[i] - 1) * b;
	int dis = v[i+1] - v[i];
	
	if (time < 0) return 0;
	
	int d = min(dis, time / a + 1);
	ans += d;
	dis -= d;
	time -= c * d;
	int k1 = k;
	
	while (k1-- && dis && time >= 0) {
		d = min(dis, time / a + 1);
		st.pb(d);
		
		dis -= d;
		time -= d * c;
	}
	return 1;
}

void calc() {
	for (int i = 0; i < m; i++) {
		if (!check(i)) break ;
	}

	sort(rall(st));
	k = min(k, (int)st.size());
	
	for (int i = 0; i < k; i++) {
		ans += st[i];
	}
}

void print() {
	cout << ans - 1;
}

void solve () {
	read();
	calc();
	print();
}
signed main() {IOS solve(); return 0;}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...