NOIP 2016 普及组初赛试题_完善程序 4.2 郊游活动

完善程序: (郊游活动)有 n 名同学参加学校组织的郊游活动,

已知学校给这 n 名同学 的郊游总经费为 A 元,

与此同时第 i 位同学自己携带了 Mi 元。

为了方便郊游,活动地点提供 B(≥n)辆自行车供人租用,

每位同学可以使用自己携带的钱或者学校的郊游经费,

为了方便账务管理,每位同学只能为自己租用自行车,

且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。

(第四、五空 2.5 分,其余 3 分)

本题采用二分法。

对于区间[l, r],

我们取中间点 mid 并判断租用到自行车的人数能否达到 mid。

判断的过程是利用贪心算法实现的。

noip2014到2017初赛普及组看程序写结果、完善程序

noip2014到2017初赛普及组看程序写结果、完善程序_noip看程序写结果_flymist的博客-CSDN博客

NOIP2016提高组初赛答案&总结

https://www.cnblogs.com/JRX2015U43/p/6533505.html




#include <iostream>
using namespace std;
#define MAXN 1000000

int n, B, A, M[MAXN], C[MAXN], l, r, ans, mid;

//我们取中间点 mid 并判断租用到自行车的人数能否达到 mid。
//判断nn人能不能都租到车子 
bool check(int nn) 
{
	int count = 0, i, j;
	i = ①;//i=n-nn+1;  [0,mid]
	j = 1;
	while (i <= n) 
	{
		//与此同时第 i 位同学自己携带了 Mi 元。
		//count就学校出的钱,如果自己带的钱够租,尽量不要让学校出钱
		//如果自己带的钱不够,让学校负担 C[j] - M[i]的钱 
		if(②)// M[i]<=C[j]   
			count += C[j] - M[i];
			//还需要多少钱才能租到mid辆的自行车 
		i++;
		j++;
	}
	return ③;//count<=A
}
//快速排序	
void sort(int a[], int l, int r) 
{
	int i = l, j = r, x = a[(l + r) / 2], y;
	
	while (i <= j) 
	{
		while (a[i] < x) i++;
		while (a[j] > x) j--;
		
		if (i <= j) 
		{
			//交换 
			y = a[i]; 
			a[i] = a[j]; 
			a[j] = y;
			
			i++; 
			j--;
		}
	}
	
	if (i < r) sort(a, i, r);
	if (l < j) sort(a, l, j);
}

int main( void ) 
{
	int i;
	
	//已知学校给这 n名同学的郊游总经费为 A 元,
    //为了方便郊游,活动地点提供 B(≥n)辆自行车供人租用,
	cin >> n >> B >> A;
	
	//与此同时第 i 位同学自己携带了 Mi 元。
	for (i = 1; i <= n; i++)
		cin >> M[i];
		
	//租用第 i 辆自行车的价格为 C[i] 元,
	for (i = 1; i <= B; i++)
		cin >> C[i];
		
	sort(M, 1, n);
	sort(C, 1, B);
	
	l = 0;
	r = n;
	while ( l <= r )
	{
		mid = (l + r) / 2;
		if( ④)  //check(mid) 
		//mid个人可以租到自行车 
		{
            ans = mid;
			l = mid + 1;
		}else
			r = ⑤;//mid-1
	}
	
	//最多有多少位同学能够租用到自行车。
	cout << ans << endl;
	
	return 0;
}



1.正确答案: n-nn+1

2.正确答案: M[i]<C[j] / M[i]<=C[j]

3.正确答案: count<=A

4.正确答案: check(mid)

5.正确答案: mid-1









CSP-J1 CSP-S1第1轮 初赛 如何拿到好成绩(60分及以上)

CSP-J1 CSP-S1第1轮 初赛 如何拿到好成绩(60分及以上)-CSDN博客

CSP-J1 CSP-S2第1轮 初赛资料集(2022.09.09)

CSP-J1 CSP-S2第1轮 初赛资料集(2022.09.09)_csp初级考试复习资料_dllglvzhenfeng的博客-CSDN博客

2022 CSP-J1 CSP-S1 第1轮 初赛 攻略 总结 心得体会 注意事项 游记

2022 CSP-J1 CSP-S1 第1轮 初赛 攻略 总结 心得体会 注意事项 游记-CSDN博客

2022 CSP-J1 入门组 初赛 第1轮 讲解 解析 真题讲解

2022 CSP-J1 入门组 初赛 第1轮 讲解 解析 真题讲解_dllglvzhenfeng的博客-CSDN博客

2022CSP-J1初赛第1轮讲解解析真题讲解

2022CSP-J1初赛第1轮讲解解析真题讲解_ljfljfwwwabcxyz_新浪博客

2022 CSP-J1 CSP-S1 初赛 第1轮 真题讲评 真题解析

2022 CSP-J1 CSP-S1 初赛 第1轮 真题讲评 真题解析_dllglvzhenfeng的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值