E - Mafia CodeForces - 348A 【二分】_348a二分-程序员宅基地

技术标签: 二分  

E - Mafia CodeForces - 348A 【二分】

One day n friends gathered together to play “Mafia”. During each round of the game some player must be the supervisor and other n - 1 people take part in the game. For each person we know in how many rounds he wants to be a player, not the supervisor: the i-th person wants to play ai rounds. What is the minimum number of rounds of the “Mafia” game they need to play to let each person play at least as many rounds as they want?

Input

The first line contains integer n (3 ≤ n ≤ 105). The second line contains n space-separated integers a1, a2, …, an (1 ≤ ai ≤ 109) — the i-th number in the list is the number of rounds the i-th person wants to play.

Output

In a single line print a single integer — the minimum number of game rounds the friends need to let the i-th person play at least ai rounds.

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Examples

Input

3

3 2 2

Output

4

Input

4

2 2 2 2

Output

3

Note

You don’t need to know the rules of “Mafia” to solve this problem. If you’re curious, it’s a game Russia got from the Soviet times: http://en.wikipedia.org/wiki/Mafia_(party_game).

题意:

有n个人,其中每个人最少参加ai次比赛。比赛是这样定义的:n个人之中出1个裁判,其中n-1个人参加

问:最少需要多少场比赛可以满足所有人要求?

思路:

因为每一局裁判只有一个,因此把焦点聚集身上在裁判,不要聚集在玩家身上

假设一共玩了k局,那么某个人当裁判的局数最多就是k-a[i]
,(就是他玩够之后一直都在当裁判),把所有人当裁判的最大值加起来,如果总值大于等于k,说明每一场比赛都可以找到裁判,(意味着k是可以的),当前k可以就减小k(左移),当前k不可以就增加k(右移)

也就是n * k - sum > k就表示该k值可以,也就是sum / (n - 1)向上取整,但是要注意这个值有可能会小于a[i]的最大值,也就是有的人的要求不能满足,因此还要将该值和a[i]max比较,取较大值。

AC代码如下:【二分】

#include <iostream>
#include <stdio.h>
#include <math.h>
#define INF 0x3f3f3f3f3f3f3f3f

using namespace std;
const int maxn = 100005;
long long a[maxn];
int n;

bool c(long long x)
{
    long long sum = 0;
    for(int i = 0; i < n; i++)
    {
        if(x < a[i])//局数小于玩家想玩的次数 不行
            return false;
        else
            sum += (x - a[i]);
    }
    if(sum >= x)//所有玩家当裁判的最大值的和大于局数 意味着可以找到裁判 局数符合要求 但不一定是最小的符合要求的局数 所以需要二分
        return true;
    else
        return false;
}

void sol()
{
    long long l = 0, r = maxn * 1e9;
    while(r - l > 1)
    {
        long long mid = (r - l) / 2 + l;
        if(c(mid))
            r = mid;
        else
            l = mid;
    }
    cout<<r<<endl;
}

int main()
{
   while(~scanf("%d", &n))
   {
       for(int i = 0; i < n; i++)
       {
           cin>>a[i];
       }
       sol();
   }
   return 0;
}

AC代码如下:【数学简化】

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <math.h>

using namespace std;
const int maxn = 100010;
long long a[maxn], ma;
int n;

int main()
{
    while(~scanf("%d", &n))
    {
        ma = -1;
        long long sum = 0, ans = 0;
        for(int i = 0; i < n; i++)
        {
            cin >> a[i];
            sum += a[i];
            ma = max(a[i], ma);
        }
        ans = (sum + n - 2) / (n - 1);
        ans = max(ans, ma);
        cout<<ans<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Floraqiu/article/details/81205143

智能推荐

PHP preg_replace() 正则替换所有符合条件的字符串-程序员宅基地

文章浏览阅读685次。大多数语言的正则表达式都是由“/”作为定界符的,而在PHP中,还可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的时候,就需要对这些“/”转义,而使用“#”就不需要转义,更简洁。而正则表达式必须要使用定界符包围起来,在Javascript中定界符是“/”,而在PHP中,比较常见的是用“/”定界,也可以用“#”定界,而且外面还需要用引号包围起来。也就是说所有正则字符都有特定含义,如果需要再用来表示原字符含义,就需要在前面加“\”转义,即使非正则字符,用“\”转义也是没有问题的。_preg_replace

POI导出word,POI写word并导出.POI word相关类详解_poi生成word 在cell中新建p-程序员宅基地

文章浏览阅读397次。目录需求:用POI写一个Word并导出需求:用POI写一个Word并导出想到一个小品,问把大象装冰箱需要几步?_poi生成word 在cell中新建p

ISTQB初级认证-知识点及脑图总结-程序员宅基地

文章浏览阅读4.6k次,点赞17次,收藏72次。前言此文章为本人利用课余时间进行的ISTQB初级认证知识和考点的总结。总结过程主要参考了“ISTQB测试人员认证初级大纲(2011版)”,由于作者能力与精力有限,此篇文章可能会存在纰漏,望见谅并及时指出。谢谢!ISTQB思维脑图上图中红色字体部分为重要考点和易错点。ISTQB(初级)知识和考点总结软件测试基础(1)为什么需要测试(1.1)缺陷带来的危害(1.1.1)资金受..._istqb初级

Qt C++ 实现无边框窗体自定义缩放和拖动_qt无边框窗口缩放-程序员宅基地

文章浏览阅读1.8k次。在本文中,我们使用Qt C++中创建了一个无边框窗体,并实现自定义缩放和拖动功能。我们利用标志隐藏了窗体的边框,并通过事件过滤器监听了窗体和顶部栏的事件,从而实现了窗口的拖动和缩放功能。我们还通过辅助函数判断鼠标所处的边缘区域,并设置相应的鼠标样式,提供了直观的用户反馈。_qt无边框窗口缩放

在Mac上通过ssh连接谷歌云上的服务器实例并使用SFTP方式上传文件_mac ssh sftp-程序员宅基地

文章浏览阅读1.3k次。1. 在Mac上通过ssh连接谷歌云上的服务器实例(1)先从本地mac电脑中通过一段简单的命令获得钥匙ssh-keygen -t rsa -f ~/.ssh/google_sem_key(生成key的文件名) -C **(服务器的用户名) -b 2048执行命令会,会让你输入并确认密码,这里直接确认即可然后输入以下命令进入.ssh目录并用ls命令列出当前目录下的文件内容cat google_sem_key.pub你会找到一大串乱码,复制下来。(2)登录谷歌云账户,_mac ssh sftp

随便推点

2061:【例1.2】梯形面积_c++梯形面积保留小数点后两位-程序员宅基地

文章浏览阅读1.6k次。2061:【例1.2】梯形面积_c++梯形面积保留小数点后两位

Linux高级网络编程系列教程_linux 高级网络编程.doc-程序员宅基地

文章浏览阅读192次。一、网络应用层编程1、Linux网络编程01——网络协议入门2、Linux网络编程02——无连接和面向连接的区别3、Linux网络编程03——字节序和地址转换4、Linux网络编程04——套接字5、Linux网络编程05——C/S与B/S架构的区别6、Linux网络编程06——UDP协议编程7、Linux网络编程07——广播8、Linux网络编程08——多播9、Linux网络编程09——TCP编程之客户端10、Linux网络编程10——TCP编程之服务器11、Linux网络编程11—_linux 高级网络编程.doc

【华为OD机试 2023最新 】 密室逃生游戏(C++ 100%)_华为 机试 2023 site:csdn.net-程序员宅基地

文章浏览阅读1.1w次。如果box.length >= key.length,则先将box转为小写模式,然后将box转为数组字典序排序,接下来利用两个指针k,j,分别从key的0索引位置,和box的0索引位置开始扫描,如果扫描到的key[k] == box[j],则k++,j++,否则只有j++。每个箱子中都有一个 字符串s ,字符串由大写字母、小写字母、数字、标点符号、空格组成,需要在这些字符串中找到所有的字母,忽略大小写后排列出对应的密码串,并返回匹配密码的箱子序号。如不存在符合要求的密码箱,则返回 -1。_华为 机试 2023 site:csdn.net

ABAP 调用第三方 API,遇到乱码该怎么办?_abap sicf接收边乱码-程序员宅基地

文章浏览阅读2.7k次,点赞4次,收藏17次。这是 Jerry 2022 年第二篇原创文章,也是本公众号第 370 篇原创文章。之前有一个朋友在知乎上向我咨询过这个问题,我觉得很有代表性,所以专门用一篇文章来讲述一些相关知识点。先看这位朋友遇到的具体问题。用 Postman 调用第三方接口,里面的中文字符能够正常显示。然而当用 ABAP 的 HTTP 工具类 CL_HTTP_CLIENT 的 response->get_data( ) 读取响应之后,发现里面的中文字符,例如 “访问成功” 是乱码:首先明确一点,既然 Postman_abap sicf接收边乱码

JQuery学习-程序员宅基地

文章浏览阅读215次。animate():用户自定义动画jQuery标签变量名 . animate({"css属性名1" : "css属性" , "css属性名2" : "css属性" , "css属性名3" : "css属性" } , 动画持续毫秒时间)animate基本上只支持位置和尺寸相关的动画。其他的基本都不支持。如果要颜色的动画,可以使用css3,用js来切换class,达到控制。

机器学习之超参数优化 - 网格优化方法(随机网格搜索)_网格搜索参数优化-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏32次。机器学习之超参数优化 - 网格优化方法(随机网格搜索)_网格搜索参数优化

推荐文章

热门文章

相关标签