求调U513364 郊游活动
  • 板块学术版
  • 楼主ZJYlove
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/12/10 22:19
  • 上次更新2024/12/11 15:15:10
查看原帖
求调U513364 郊游活动
981858
ZJYlove楼主2024/12/10 22:19

郊游活动

题目描述

nn 名同学参加学校组织的郊游活动,已知学校给这 nn 名同学的郊游总经费为 CC 元,与此同时第 ii 位同学自己携带了 aia_i 元。为了方便郊游,活动地点提供了 mm 辆自行车供人租用(mnm \ge n),租用第 ii 辆自行车的价格为 bib_i 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。

输入格式

第一行,三个整数 n,m,Cn, m, C,分别表示同学数量,自行车数量,以及总经费(1nm105,0C1091 \le n \le m \le 10^5, 0 \le C \le 10^9)。

第二行,nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n,表示每位同学自己携带了多少元钱(0ai1090 \le a_i \le 10^9)。

第三行,mm 个整数 b1,b2,,bmb_1, b_2, \ldots, b_m,表示租用每辆自行车所需的钱数(1bi1091 \le b_i \le 10^9)。

输出格式

输出一个整数,表示最多有多少位同学能够租用到自行车。

样例 #1

样例输入 #1

3 5 10
1 2 3
11 6 8 25 9

样例输出 #1

2
#include<bits/stdc++.h>
using namespace std;
long long n,m,c,a[2000050],b[2000050];
bool check(int x){
	long long sum1=0,sum2=0;
	for(int i=1;i<=x;i++){
		sum1+=b[i];
		sum2+=a[i];
	}
	if(sum1>sum2+c){
		return false;
	}else{
		return true;
	}
}
int main(){
    cin>>n>>m>>c;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    }
    for(int i=1;i<=m;i++){
    	cin>>b[i];
    }
    sort(a+1,a+n+1);
    sort(b+1,b+m+1);
   	long long l=1,r=m,res=0;
   	while(l<=r){
   		long long mid=(l+r)/2;
   		if(check(mid)){
   			res=mid;
   			l=mid+1;
   		}else{
   			r=mid-1;
   		}
   	}
   	printf("%d\n",res);
    return 0;
} //我的代码QAQ
2024/12/10 22:19
加载中...