#10770. 分治算法(NOIP2016)郊游活动
分治算法(NOIP2016)郊游活动
(NOIP2016)郊游活动
有n名同学参加学校组织的郊游活动,已知学校给这n名同学的郊游总经费为A元,与此同时第i位同学自己携带了M_i元。为了方便郊游,活动地点提供B(B≥n)辆自行车供人租用,租用第j辆自行车的价格为C_j元,每位同学可以使用自己携带的钱或者学校的郊游经费,为了方便服务管理,每位同学只能为自己租用自行车,且不会借钱给他人,他们想知道最多有多少位同学能够租用到自行车。
#include<iostream>
using namespace std;
#define MAXN 1000000
int n,B,A,M[MAXN],C[MAXN],l,r,ans,mid;
bool check(int nn){
int count=0,i,j;
i=①;
j=1;
while(i<=n){
if(②)
count+=C[j]-M[i];
i++;
j++;
}
return③;
}
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(){
int i;
cin>>n>>B>>A;
for(i=1;i<=n;i++)
cin>>M[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(④){
ans=mid;
l=mid+1;
}else
r=⑤;
}
cout<<ans<<endl;
return 0;
}
①处应填( )。
{{ select(1) }}
- n-nn+1
- 1
- n-nn
- nn
②处应填( )。
{{ select(2) }}
- M[j]>C[i]
- M[i]>C[j]
- M[i]<C[j]
- M[j]<C[i]
③处应填( )。
{{ select(3) }}
- count<=A
- count>=A
- count
- A-count
④处应填( )。
{{ select(4) }}
- check(mid-1)
- !check(mid)
- check(mid)
- check(mid+1)
⑤处应填( )。
{{ select(5) }}
- break
- r=mid+1
- r=mid
- r=mid-1