微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

F - Certifications lower_bound

F - Certifications

https://vjudge.csgrandeur.cn/problem/Gym-101343F

Dr. Samer与GX公司达成协议,为创新编程实验室的每堂课设计证书。

GX公司给了Samer博士n个offer,其中第i个offer包含ai证书。如果Samer博士想要接受第i个报价,他必须购买该报价给出的所有证书。

Samer博士想为每节课购买x个证书,他想获得offer,因为对于一些offer来说,这将使成本降低到50%以上。每堂课,萨博士都会购买最低数量的证书,这样他就能给每个学生颁发证书。并且保证他会花最少的钱。

你能帮助Samer博士了解一下他每节课需要购买多少个证书才能获得一个可以接受的报价吗?

输入

第一行为整数n(1≤n≤105),其中n为GX公司给出的报价数。

第二行包含n个整数a1, a2,…An(1≤ai≤109),其中ai为第i个offer中的证书数量

第三行为整数m(1≤m≤105),其中m为创新编程实验室的授课数。

第四行包含m个整数x1, x2,…Xm(1≤xi≤109),其中xi为第i节课所需证书数。

输出

打印m线。第i行必须包含一个整数x,其中x是samer博士将为第i次讲座购买的证书的数量

如果萨博士不能接受第i次讲座的任何邀请,打印“萨博士不能接受任何邀请:()”。(没有引号)。

#include<bits/stdc++.h>
using namespace std;
int p[100010];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        scanf("%d",&p[i]);
    sort(p,p+n);//注意要有排序
    int m;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        int k;
        scanf("%d",&k);
        int q=lower_bound(p,p+n,k)-p;
        if(q==n)//当找不到k时,返回最后一个元素的下一个元素下标n-1+1
            printf("Dr. Samer cannot take any offer :(.\n");
        else
            printf("%d\n",p[q]);
    }
}

原文地址:https://www.jb51.cc/wenti/3279102.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐