专栏文章

题解:P13512 [KOI 2025 #1] 稻草人

P13512题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miomzioa
此快照首次捕获于
2025/12/02 21:51
3 个月前
此快照最后确认于
2025/12/02 21:51
3 个月前
查看原文
很明显是贪心,每次选最大的几个数量最小。
思路:维护aa数组的小根堆以及堆内元素的和。如果和小于PP输出负一,否则尽可能删除最小的,减少所需数量。
代码:
CPP
#include<bits/stdc++.h>
using namespace std;
priority_queue<int,vector<int>,greater<> >q;//维护小根堆
int n,p,x,sum;//sum为q中的和
int main(){
	cin >> n >> p;
	for(int i = 1;i <= n;i++){
		cin >> x; sum += x;
		q.push(x); 
		if(sum < p) cout << "-1 ";//总和不够
		else{ while(sum - q.top() >= p){//能删就删,删最小的
				sum -= q.top(); q.pop();
			} cout << q.size() << " ";
		}
	} return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...