打卡信奥刷题(3397)用C++实现信奥题 P9977 [USACO23DEC] Bovine Acrobatics S

P9977 [USACO23DEC] Bovine Acrobatics S

题目描述

Farmer John 决定让他的奶牛表演杂技!首先,FJ 为他的奶牛称重,发现她们有 N N N 1 ≤ N ≤ 2 × 10 5 1\le N\le 2\times 10^5 1N2×105)个不同的体重。具体来说,对于全部的 i ∈ [ 1 , N ] i\in [1,N] i[1,N],有 a i a_i ai 只奶牛的体重为 w i w_i wi 单位( 1 ≤ a i ≤ 10 9 , 1 ≤ w i ≤ 10 9 1\le a_i\le 10^9, 1\le w_i\le 10^9 1ai109,1wi109)。

他最出名的节目需要奶牛叠成平衡的奶牛塔。一座奶牛塔是一些奶牛,每只奶牛站在下一只奶牛身上。一座奶牛塔是平衡的,当且仅当每一只被踩着的奶牛,都比直接踩在它身上的那只奶牛重至少 K K K 1 ≤ K ≤ 10 9 1\le K\le 10^9 1K109)单位。每只奶牛都可以成为奶牛塔的一部分。

如果 FJ 想要创造最多 M M M 1 ≤ M ≤ 10 9 1 \le M \le 10^9 1M109)座奶牛塔,最多有多少只奶牛可以成为奶牛塔的一部分?

输入格式

第一行包含三个空格分隔的整数 N N N M M M K K K

接下来 N N N 行,每行包含两个空格分隔的整数 w i w_i wi a i a_i ai。保证所有的 w i w_i wi 是不同的。

输出格式

输出当 FJ 采用最佳方案时,奶牛塔中奶牛的最大数目。

输入输出样例 #1

输入 #1

3 5 2
9 4
7 6
5 5

输出 #1

14

输入输出样例 #2

输入 #2

3 5 3
5 5
7 6
9 4

输出 #2

9

说明/提示

样例解释 1

FJ 可以用体重为 5 , 7 , 9 5,7,9 5,7,9 的奶牛创造四座平衡的奶牛塔,再用体重为 5 , 7 5,7 5,7 的奶牛创造另一座。

样例解释 2

FJ 可以用体重为 5 , 9 5,9 5,9 的奶牛创造四座平衡的奶牛塔,再用体重为 7 7 7 的一只奶牛创造另一座。或者,他可以用体重为 5 , 9 5,9 5,9 的奶牛创造四座平衡的奶牛塔,再用体重为 5 5 5 的一只奶牛创造另一座。

测试点性质

  • 测试点 3 − 5 3-5 35 满足 M ≤ 5000 M \le 5000 M5000 且奶牛的总数不超过 5000 5000 5000
  • 测试点 6 − 11 6-11 611 满足奶牛的总数不超过 2 ⋅ 10 5 2\cdot 10^5 2105
  • 测试点 12 − 17 12-17 1217 没有额外限制。

C++实现

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define PII pair<int, int>

const int N = 2e5 + 10;
int n, m, k;
PII x[N];
LL ans;
LL q1[N], q2[N], hh = 1, tt;

int main()
{
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++) 
		scanf("%d%d", &x[i].first, &x[i].second);
	sort(x + 1, x + n + 1);
	
	for(int i = 1; i <= n; i++)
	{
		while(hh <= tt && x[i].first - q1[hh] >= k) 
			m += q2[hh++];
		q1[++tt] = x[i].first;
		q2[tt] = min(x[i].second, m);
		m -= q2[tt], ans += q2[tt];
	}
	cout << ans << endl;
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值