Submission #1180110

#TimeUsernameProblemLanguageResultExecution timeMemory
1180110miniobSemiexpress (JOI17_semiexpress)C++20
100 / 100
54 ms33580 KiB
#include <bits/stdc++.h>
using namespace std;

long long gdzie[3007];

int main() 
{
	long long n, m, k, a, b, c, t, odp = -1;
	cin >> n >> m >> k >> a >> b >> c >> t;
	priority_queue<long long> pq;
	for(long long i = 0; i < m; i++)
	{
		cin >> gdzie[i];
	}
	for(long long i = 0; i < m - 1; i++)
	{
		long long podst = (gdzie[i] - 1) * b;
		if(podst <= t)
		{
			long long ile_dodatkowo = (t - podst) / a;
			long long prawo = min(gdzie[i] + ile_dodatkowo, gdzie[i + 1] - 1);
			odp += prawo + 1 - gdzie[i];
			//cout << prawo + 1 - gdzie[i] << endl;
			for(long long j = 0; j < k; j++)
			{
				if(podst + (prawo + 1 - gdzie[i]) * c <= t)
				{
					ile_dodatkowo = (t - (podst + (prawo + 1 - gdzie[i]) * c)) / a;
					long long prawo2 = min(prawo + ile_dodatkowo + 1, gdzie[i + 1] - 1);
					//cout << prawo2 - prawo << endl;
					pq.push(prawo2 - prawo);
					prawo = prawo2;
				}
			}
		}
	}
	if((gdzie[m - 1] - 1) * b <= t)
	{
		odp++;
	}
	for(long long i = m; i < k && !pq.empty(); i++)
	{
		odp += pq.top();
		pq.pop();
	}
	cout << odp << endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...