170692025-05-20 18:31:20algoproAutózáscpp17Hibás válasz 50/100178ms10544 KiB
// UUID: a5845575-a492-4fbc-ae61-4ab94ce84d1b
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
	int n, k;
	cin >> n >> k;
	vector<int> d(n), c(n), prefix(n+1);
	for(int i=0;i<n;i++) cin >> d[i] >> c[i];
	for(int i=1;i<=n;i++) prefix[i]=prefix[i-1]+d[i-1];
	deque<int> dq;
	int gas=0,  cost=0;
	vector<int> capacity(n, k);
	for(int i=0;i<n;i++){
		while(!dq.empty() && c[i]<=c[dq.back()]) dq.pop_back();
		while(!dq.empty() && k<prefix[i]-prefix[dq.front()]) dq.pop_front();
		dq.push_back(i);
		int dist=d[i];
		gas-=dist;
		for(int j=0;j<dq.size();j++){
			int amount=min(min(k-(prefix[i]-prefix[dq[j]]), capacity[dq[j]]), min(k-gas, dist));
			dist-=amount;
			capacity[dq[j]]-=amount;
			cost+=amount*c[dq[j]];
			gas+=amount;
			//cout << dq.front() << ' ' << amount << '\n';
			if(0==dist) break;
		}
	}
	int tankNum=0;
	for(int x : capacity) tankNum+=(x<k);
	cout << cost << ' ' << tankNum << '\n';
	for(int i=0;i<n;i++) if(capacity[i]<k) cout << i+1 << ' ' << k-capacity[i] << '\n';
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/100
1Elfogadva0/01ms500 KiB
2Elfogadva0/0148ms9780 KiB
3Elfogadva5/51ms320 KiB
4Elfogadva5/51ms316 KiB
5Elfogadva5/51ms316 KiB
6Elfogadva5/51ms316 KiB
7Elfogadva5/51ms316 KiB
8Elfogadva5/51ms316 KiB
9Elfogadva5/51ms352 KiB
10Elfogadva5/51ms316 KiB
11Hibás válasz0/530ms2332 KiB
12Hibás válasz0/550ms3332 KiB
13Elfogadva5/545ms3076 KiB
14Elfogadva5/590ms5940 KiB
15Hibás válasz0/5108ms6520 KiB
16Hibás válasz0/5103ms6316 KiB
17Hibás válasz0/5107ms6452 KiB
18Hibás válasz0/5101ms6180 KiB
19Hibás válasz0/5158ms9524 KiB
20Hibás válasz0/5165ms10068 KiB
21Hibás válasz0/5172ms10308 KiB
22Hibás válasz0/5178ms10544 KiB