题目描述
输入
输出
样例输入
3 51 74
2 5 2
2 7 9
样例输出
7
提示
样例说明: 在6秒后,每个防护点防御力分别为 14,47,56,只有第三个防护点达到了x的防御力。防御力大于x的防护点防御力之和为56,小于s。 在7秒后,每个防护点防御力分别为 16,54,65,后两个防护点防御力都达到了x,防御力之和为119,大于s。 AW: L7-4 二分法应用 - 作业
#include<iostream>
using namespace std;
int p[100005],a[100005],n,x,s,l,r,ans,mid;
bool check(int k){
int sum=0;
for(int i=1;i<=n;i++){
if(p[i]+a[i]*k > x){
sum += p[i]+a[i]*k;
}
}
return sum>x;
}
int main()
{
cin>>n>>x>>s;
for(int i=1;i<=n;i++){
cin>>p[i];
}
for(int i=1;i<=n;i++){
cin>>a[i];
}
l=1;
r=1000000;
ans=0;
while(l<=r){
mid=(r+l)/2;
if(check(mid)){
ans=mid;
r=mid-1;
if(check(mid)==1 && check(mid-1)==0){
break;
}
}else{
l=mid+1;
}
}
cout<<ans+1;
return 0;
}