有 n 名同学参加学校组织的郊游活动,已知学校给这 n 名同学的郊游总经费为 C 元,与此同时第 i 位同学自己携带了 ai 元。为了方便郊游,活动地点提供了 m 辆自行车供人租用(m≥n),租用第 i 辆自行车的价格为 bi 元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便账务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。
第一行,三个整数 n,m,C,分别表示同学数量,自行车数量,以及总经费(1≤n≤m≤105,0≤C≤109)。
第二行,n 个整数 a1,a2,…,an,表示每位同学自己携带了多少元钱(0≤ai≤109)。
第三行,m 个整数 b1,b2,…,bm,表示租用每辆自行车所需的钱数(1≤bi≤109)。
输出一个整数,表示最多有多少位同学能够租用到自行车。
3 5 10
1 2 3
11 6 8 25 9
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