首页 > 其他分享 >Nebius Welcome Round (Div. 1 + Div. 2) B. Vaccination

Nebius Welcome Round (Div. 1 + Div. 2) B. Vaccination

时间:2023-10-21 20:12:57浏览次数:38  
标签:std cur Vaccination Welcome int 疫苗 Div 时刻

你管理一个疫苗接种站,将会有 \(n\) 个人前来接种疫苗。第 \(i\) 个到来的人时间为 \(t_i\) ,已知每个人的等待时间不会超过 \(w\) 分钟。

疫苗存放在特质冰箱中,一袋疫苗有 \(k\) 支,当一袋疫苗在 \(x\) 时刻打开时,它的有效时间为 \(d\) 。

现在询问最少需要打开多少袋疫苗满足 \(n\) 个人都可以接种。

记:某袋疫苗对应的第一个人在 \(cur\) 时刻到达,则他可以等待到 \(cur + w\) 时刻,在此时打开这带疫苗,于是它会在 \(cur + w + d\) 时刻失效。若这袋疫苗用完,相当于提前失效。

于是可以使用在线维护区间的双指针算法处理。

view
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
void solve(){
	int n, k, d, w; std::cin >> n >> k >> d >> w;
	std::vector<int> a(n+1);
	for (int i = 1; i <= n; i++) std::cin >> a[i];
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		int j = i, cnt = 0;
		while (j <= n && a[j] <= a[i] + w + d && cnt + 1 <= k) { // 当前的 j ,上一个 cnt
			j += 1;
			cnt += 1;
		}
		j -= 1; cnt -= 1;
		ans += 1;
		i = j;
	}
	std::cout << ans << '\n';
}
		                
int main() { 
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
}

标签:std,cur,Vaccination,Welcome,int,疫苗,Div,时刻
From: https://www.cnblogs.com/zsxuan/p/17779435.html

相关文章

  • Educational Codeforces Round 145 (Rated for Div. 2) B. Points on Plane
    给一个二维平面,你需要在上面放\(n\)个芯片。将一个芯片放在\((x,y)\)的代价为\(|x|+|y|\)。放\(n\)个代价的代价为,所有芯片中耗费的最大代价。并且你需要保证任意两个芯片之间的距离严格\(>1\)。现在给出\(n\)给芯片,询问放\(n\)个芯片的最小代价。一:不难想到......
  • 使一个div垂直+水平居中的几种方法
    使一个div垂直+水平居中的几种方法思路1:绝对定位居中(原始版)思路2:绝对定位居中(改进版之一)思路3:绝对定位居中(改进版之二)思路4:flex布局居中思路1:绝对定位居中(原始版)这个是我回答出来的,也是被各位所熟知的一种方法,设外层div相对定位,内层div绝对定位,top、left分别设为50%,然后通过设置m......
  • Educational Codeforces Round 149 (Rated for Div. 2)
    这场D被切穿了。A题答案为x或者x-11B题答案就是最长的连续一段的长度+1证明的话大概可以将它看成是几段连续上升和下降的段,然后在峰谷、峰顶分别填上最小、最大,剩下的就依次递增或递减就行。C题将一段连续的0/1视作一个块,那么我们最小化这个块的数量就行。D题如果猜到......
  • Codeforces Round 863 (Div. 3) B. Conveyor Belts
    给一个\(n\timesn\)的矩阵,\(n\)是偶数。将矩阵按圈分割,同一圈的位置可以不消耗代价移动,可以消耗一个代价移动到相邻圈。给出\(n,x_1,y_1,x_2,y_2\),询问\((x_1,y_1)\)移动到\((x_2,y_2)\)的代价最小是多少。显然对每个圈可以选择左上角作为定点。显然直线\(......
  • Codeforces Round 865 (Div. 2) B. Grid Reconstruction
    给一个\(2\timesn\)的网格,且\(n\)是偶数。你需要将\(1\sim2\timesn\)填入这个网格。一条路径是从\((1,1)\)开始,每次只能向右或向下,到\((2,n)\)结束时,所经过的位置。按经过点的顺序标号,一两条路径的代价是\(cost=a_1-a_2+a_3-a_4+\cdots=\sum_{i=1......
  • Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final Round)
    \(D.EffectsofAntiPimples\)对每个数字能到达的所有位置先预处理最大值,那么就代表选择这个数字之后真实的贡献,那么对这样的预处理值,最小值显然只有一种做法,为\(2^0\),第二小的值应该可以与最小值一起选择,所以答案为\(2^1\),以此类推之后,每个值乘上对应的2的幂次之后求和即......
  • Codeforces Round 872 (Div. 2) B. LuoTianyi and the Table
    给一个\(n\timesm\)的矩阵和\(n\timesm\)个数,你需要把这些数填入矩阵。保证\[\sum_{i=1}^n\sum_{j=1}^m\left(\mathop{max}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}-\mathop{min}\limits_{1\leqx\leqi,1\leqy\leqj}a_{x,y}\right)......
  • AtCoder Regular Contest 167——B - Product of Divisors
    题目很明显,给定 所有因数的积不断除以最多能除几次。首先,很容易发现,对于每一对因子,都可以对答案得出B的贡献,设A的因子数目为n。将A进行质因数分解,PBa1,PBa2,PBa3……PBam,那么因数个数就是质因子加一的乘积。那么因子对数也就是前者一半。答案就是B乘因子对数除以二注意此处......
  • Educational Codeforces Round 149 (Rated for Div. 2) C. Best Binary String
    给一个字符串\(s\)包含\(0,1,?\)。定义一个\(01\)串\(s\)的\(cost\)为:选择\(s\)的任意一个子段\([l,r]\)并\(reverse\)。将\(s\)变为一个非降序序列时的\(reverse\)最小次数即\(cost\)。你可以让\(s\)的\(?\)换成\(0/1\),使新\(s\)的\(cost\)......
  • Educational Codeforces Round 150 (Rated for Div. 2) B. Keep it Beautiful
    数组\(a=[a_1,a_2,\cdots,a_n]\)被称为是美丽的,如果可以将\([1,x]\)段移到\([x+1,n]\)段后面,\(x\geq0\),数组可以构成非降序。现在有一个数组\(a\)(一开始为空)和\(q\)个询问,第\(i\)个询问给一个正整数\(x_i\)。需要逐步执行以下操作。若\(x_i\)拼接......