萌新刚学 OI,求助反悔贪心
查看原帖
萌新刚学 OI,求助反悔贪心
298549
SIXIANG32楼主2022/3/1 13:35

如题

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#define MAXN 250000
#define int long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
struct node {
	long long val;
	int id;
	node(long long V, int I) {
		val = V, id = I;
	}
	bool operator < (const node &other) const {
		return val < other.val;
	}
};
vector <int> vec;
long long a[MAXN + 10], b[MAXN + 10];
bool vis[MAXN + 10];
signed main() {
	priority_queue <node> que;
	int n; cin >> n;
	for(int p = 1; p <= n; p++)
		cin >> a[p];
	long long ans = 0, tot = 0;
	for(int p = 1; p <= n; p++) {
		cin >> b[p];
		tot += a[p];
		if(tot >= b[p]) {
			tot -= b[p];
			que.push(node(b[p], p));
			ans++;
		}
		else if(!que.empty() && que.top().val > b[p]) {
			tot = tot + que.top().val - b[p];
			que.pop(); que.push(node(b[p], p));
		}
	}
	while(!que.empty()) {
		vec.push_back(que.top().id);
		que.pop();
	}
	sort(vec.begin(), vec.end());
	cout << ans << endl;
	for(int p = 0; p < ans; p++)
		cout << vec[p] << ' ';
}

这是我的 AC 代码,把 36 行改成 else if(!que.empty() && tot + que.top().val >= b[p]) { 就 60pts

不应该是当前省下来的数目加上大根堆堆顶的数目大于 b 就可以用了咩?/kk

求助/kel

2022/3/1 13:35
加载中...