2021.8.14提高B组模拟6T2 + P7557 [USACO21OPEN] Acowdemia (二分)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.14提高B组模拟6T2 + P7557 [USACO21OPEN] Acowdemia (二分)相关的知识,希望对你有一定的参考价值。

Acowdemia

题目传送门

输入样例

1.

4 4 1
1 100 1 1

2.

4 1 4
1 100 1 1

输出样例

1.

3

2.

2

解题思路

先将数据从大到小排序

满足了单调性,可以用二分查找答案

check(判断)是否合法

AC代码

#include<algorithm>
#include<cstdio>
using namespace std;
int n,k,ll,l,r=100000,answer,a[100005];
bool cmp(int x,int y)

    return x>y;

bool check(int x)//判断是否合法

    long long ans=0;
    for(int i=1;i<=x;i++)
        if(a[i]<x)//如果不满x
        
            if(x-a[i]>k)return false;//相差的值还大于最多要写的论文数,就不合法
            ans+=1ll*(x-a[i]);//累加需要多少引用
            if(ans>1ll*k*1ll*ll)return false;//如果引用数还大于最多可以引用的数量,自然不合法
        
    return true;

int main()

    scanf("%d%d%d",&n,&k,&ll);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1,cmp);//大到小排序
    while(l<=r)//二分
    
        int mid=(l+r)/2;
        if(check(mid))l=mid+1,answer=mid;
        else r=mid-1;
    
    printf("%d",answer);
    return 0;

谢谢

以上是关于2021.8.14提高B组模拟6T2 + P7557 [USACO21OPEN] Acowdemia (二分)的主要内容,如果未能解决你的问题,请参考以下文章

2021.8.14提高B组模拟6T4 + P7555 [USACO21OPEN] Maze Tac Toe (dfs)

2021.8.14提高B组模拟6T4 + P7555 [USACO21OPEN] Maze Tac Toe (dfs)

2021.8.14提高B组模拟6T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)

2021.8.14提高B组模拟6T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)

2017.12.09NOIP提高组模拟赛A组

2017.07.16【NOIP提高组】模拟赛B组 卫星照片 题解