您的位置:首页 > 其它

N - Mafia Codeforces 348A

2016-07-27 23:18 330 查看
`

N - Mafia

Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u

Submit

Status

Description

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.

Sample Input

Input

3

3 2 2

Output

4

Input

4

2 2 2 2

Output

3

Hint

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个人每次需要抽出1个人来主持游戏剩下的人玩这个游戏。现在给出每个人想玩多少次游戏问最少需要进行多少轮游戏可以让每个人都满足要求。

思路:枚举次数,判断枚举的次数是否合理。

失误:数据应该用Int64。

代码如下:



#include<cstdio>
#include<algorithm>

const int MAXN=1e7+10;
__int64 a[MAXN],n,mid,left,right;//定义到所有函数之前

bool judge(__int64 mid)
{
__int64 ans=0;//记录第总人数主持的最大值 即每个人只玩够自己的局数就不玩了
for(int i=1;i<=n;++i)
{
if(a[i]>mid) return false;//对于没有筛选过的定义域进行筛选
ans+=mid-a[i];
}
return mid<=ans;//每局都有一个主持者  两者应该相等
}

int main()
{
__int64 cnt;//变量定义到外面
right=0;
scanf("%I64d",&n);
for(__int64 i=1;i<=n;++i)
{
scanf("%I64d",&a[i]);
right+=a[i];//确定范围
}
left=0;
while(left<=right)
{
mid=(right+left)>>1;
if(judge(mid))
{
cnt=mid;//必须要有这一步,否则就会错 保存最精确的结果
right=mid-1;//假想如果在某一区间之后就不再成立 那么mid就不是答案了
}
else
{
left=mid+1;
}
}
printf("%I64d\n",cnt);
return 0;
}


“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: