제출 #83477

#제출 시각아이디문제언어결과실행 시간메모리
83477ekremSemiexpress (JOI17_semiexpress)C++98
100 / 100
3 ms1024 KiB
#include <bits/stdc++.h>
#define st first
#define nd second
#define mp make_pair
#define pb push_back
#define N 1000005
using namespace std;
typedef long long ll;
typedef pair < ll , ll > ii;

ll n, m, k, A, B, C, ans = 0, a[N];
ll t;
priority_queue < pair < ii , ii > > q;

void ekle(ll bas, ll son, ll kal){
	if(bas > son or kal < 0)
		return;
	ll bul = 0;
	ll git = kal / A;
	if(bas + git <= son)
		bul = git + 1;
	else
		bul = son - bas + 1;
	// cout << bas << " " << son << " -> " << bul << " , " << kal << endl;
	q.push(mp(mp(bul, kal), mp(bas, son)));
}

void sil(){
	pair < ii , ii > x = q.top();
	ans += x.st.st;
	q.pop();
	ll bas = x.nd.st;
	ll son = x.nd.nd;
	ll kal = x.st.nd;

	ll git = kal / A;
	// cout << x.st.st << " " << bas << " " << son << " " << kal << " " << git << endl;
	ekle(bas + git + 1, son, kal - (git + 1)*C);
}

int main() {
	// freopen("in.txt", "r", stdin);
	// freopen("out.txt", "w", stdout);
	scanf("%lld %lld %lld",&n ,&m ,&k); k -= m;
	scanf("%lld %lld %lld",&A ,&B ,&C);
	scanf("%lld",&t);
	for(ll i = 1; i <= m; i++)
		scanf("%lld",a + i);
	a[m + 1] = n + 1;
	for(ll i = 1; i <= m; i++){
		ll kal = t - (a[i] - 1)*B;
		if(kal < 0)
			break;
		ll git = kal / A;
		// cout << a[i] << " " << kal << " " << git << " " << a[i + 1] << endl;
		if(a[i] + git < a[i + 1]){
			ans += git + 1;
			// cout << "AMK = " << ans << endl;
			ekle(a[i] + git + 1, a[i + 1] - 1, kal - (git + 1)*C );
		}
		else
			ans += a[i + 1] - a[i];
	}
	// cout << "ans = " << ans << endl;
	// cout << endl << endl;
	while(!q.empty() and k--){
		sil();
	}
	printf("%lld\n", ans - 1);
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

semiexpress.cpp: In function 'int main()':
semiexpress.cpp:44:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld %lld",&n ,&m ,&k); k -= m;
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
semiexpress.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld %lld",&A ,&B ,&C);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
semiexpress.cpp:46:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld",&t);
  ~~~~~^~~~~~~~~~~
semiexpress.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld",a + i);
   ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...