zoukankan      html  css  js  c++  java
  • codeforces Mafia

    /*
     * Mafia.cpp
     *
     *  Created on: 2013-10-12
     *      Author: wangzhu
     */
    
    /**
     * 每个人都想玩若干场,求至少需要玩几场才可以满足大家的需求。
     * 结果必然在某个人想玩的次数nmax(此人想玩的是最多的)与所有人想玩的次数和sum之间,
     * 故二分,left = nmax,right = sum,
     * 只需要需要玩的次数 * (总人数-1) >= 大家想玩的次数和即可
     *
     */
    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define LL long long
    #define NMAX 100010
    int arr[NMAX];
    LL binary(int n, int nmax, LL sum) {
        LL mid = -1, left = nmax, right = sum;
        while (left <= right) {
            mid = left + (right - left) / 2;
            if (sum <= (mid * n)) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return left;
    }
    int main() {
        freopen("data.in", "r", stdin);
        int n, nmax;
        LL sum;
        while(~scanf("%d",&n)) {
            nmax = -1;
            sum = 0;
            for(int i = 0;i < n;i++) {
                scanf("%d",arr + i);
                if(nmax < arr[i]) {
                    nmax = arr[i];
                }
                sum += arr[i];
            }
            printf("%I64d
    ",binary(n - 1,nmax,sum));
    
        }
        return 0;
    }
  • 相关阅读:
    String类的常用方法
    StringBuffer和String的区别
    docker安装kali
    6.找素数
    5.三羊献瑞
    4.迷宫大逃亡
    3.百米
    2.后台登录
    1.猴子吃桃
    深入理解Docker容器和镜像
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/3364584.html
Copyright © 2011-2022 走看看