最新公告
  • 欢迎您光临信息学奥赛网,一个优质的信息学编程题库和信息学编程学习资源专业网站。欢迎加入VIP
  • 问题 AZ: L7-5 初识递归 - 练习3

    正文概述 网友投稿   2026-01-22 10:40:28  

    题目描述

    小机器人发现这个防护网装置有n个防护点,初始防护值为pi,第i个防护点每过1秒都会提高ai的防御力,只有防御力大于x才能对防御星际战列舰起作用,小机器人想知道至少多少秒后,防御力大于x的防护点的防御力之和能大于s。

    输入

    第一行3个用空格隔开的非负整数n、x、s表示防护点的数量、能起作用的防御力、和需要的防御力之和。 第二行n个用空格隔开的整数pi。 第三行n个用空格隔开的整数ai。 1<= n <=100000, 1<= x、s <=1000000, 1<= pi、ai <=1000。

    输出

    输出一行一个整数表示答案。

    样例输入

    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;
    }

    信息学奥赛网,一个优质的源码资源平台!
    信息学奥赛网 » 问题 AZ: L7-5 初识递归 - 练习3