zoukankan      html  css  js  c++  java
  • "中国东信杯"广西大学第二届程序设计竞赛E Antinomy与红玉海(二分)

    题目大意:

    n个人,每个人想参加a[i]轮游戏,但每场游戏必须有个一个人当工具人

    问最少有几场游戏

    题解:

    二分

    答案范围:[0,sigma a[i]]

    check:首先a[i]>=ans,其次a[i]-ans是这个人能当工具人的场次,所有的和要大于等于ans

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    #define N 200009
    using namespace std;
     
    int n;
     
    LL a[N];
     
    LL l,r,ans;
     
    bool check(LL x)
    {
        LL p=0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]>x) return false;
            p=p+x-a[i];
        }   
        return p>=x;
    }
     
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]),r=r+a[i];
        while(l<=r)
        {
            LL mid=(l+r)>>1;
            if(check(mid)) ans=mid,r=mid-1;
            else l=mid+1;
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    选择排序
    java面试题08
    java面试题07
    java面试题06
    java面试题05
    oop.1
    4
    3
    Struts1中actionform和action属于MVC哪一层
    mysql查询时间段的所有数据
  • 原文地址:https://www.cnblogs.com/zzyh/p/12012918.html
Copyright © 2011-2022 走看看