codeforces Vaccination

该问题是一个关于优化疫苗分配的问题,每个病人有最大等待时间w,疫苗有效时间d。程序使用贪心策略,按病人的到达时间顺序分配,当新病人与前一个病人间隔超过d+w或超过疫苗包数k时,需增加一个疫苗计数。提供的C++代码实现了这一逻辑,计算最小的疫苗需求量。
摘要由CSDN通过智能技术生成

Problem - 1804B - Codeforces

首先我们知道每一个病人有自己的到来时间。

其次,我们知道每一个病人最多等待w时间,很容易想到贪心思路,让每一个病人都等到最后的w再服用疫苗。

还有,至关重要的一点,我们知道一个疫苗最多能使用d时间,否则需要答案加一。

最后,注意疫苗的包数和k数。

根据以上就可以很容易得到一个更新的思路,我们每次枚举每一个人,如果她和前面的人相距大于d+w的时间,就需要答案加一,或者当其数量超过K时都需要增加一个答案。

好了,看代码。

#include <bits/stdc++.h>
using namespace std;
const int N = 200050;
int a[N];

int main() {
	int t;
	cin >> t;
	while (t--) {
		int n, k, d, w;
		cin >> n >> k >> d >> w;
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
		}
		int ans = 1;
		int last = 1;
		for (int i = 1; i <= n; i++) {
			if (a[i] - a[last] > d + w || i - last + 1 > k) {
				ans++;
				last = i;
			}

		}
		cout << ans << "\n";
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值