Codeforces 348A:Mafia(二分+思维)
2016-07-28 00:45
483 查看
A. Mafia
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
One day n friends gathered together to play "Mafia". During each round of the game some player must be the supervisor and other n - 1people
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 airounds.
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 %I64dspecifier.
Examples
input
output
input
output
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个人打牌,每局需要一个人当裁判,然后给出了n个人每人想当玩家的次数,问如果这些人的愿望都满足时,最少需要玩多少局。
解题思路:判断n*mid-sum>=mid是否符合条件,这个式子怎么来的:mid-a1+mid-a2+mid-a3+mid-a4+...+mid-an,其中 mid-ai是每人当裁判的场数,变形可得上式为n*mid-sum,如果所有人当裁判的场数多余当前场数,那么压缩区间。。。
代码如下:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
One day n friends gathered together to play "Mafia". During each round of the game some player must be the supervisor and other n - 1people
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 airounds.
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 %I64dspecifier.
Examples
input
3 3 2 2
output
4
input
42 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个人打牌,每局需要一个人当裁判,然后给出了n个人每人想当玩家的次数,问如果这些人的愿望都满足时,最少需要玩多少局。
解题思路:判断n*mid-sum>=mid是否符合条件,这个式子怎么来的:mid-a1+mid-a2+mid-a3+mid-a4+...+mid-an,其中 mid-ai是每人当裁判的场数,变形可得上式为n*mid-sum,如果所有人当裁判的场数多余当前场数,那么压缩区间。。。
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
#define LL __int64int main()
{
LL n;
scanf("%I64d",&n);
LL l=-1,r,sum=0;
LL tmp;
for(LL i=0;i<n;i++)
{
scanf("%I64d",&tmp);
sum=sum+tmp;
l=max(l,tmp);
}
r=sum;
LL mid,ans;
while(l<=r)
{
mid=(l+r)/2;
if(n*mid-sum>=mid)
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
printf("%I64d\n",ans);
return 0;
}
相关文章推荐
- 快速学习JavaScript的6个思维技巧
- 暗时间读书笔记
- 运营人员,这些产品思维咱必须要懂
- 思维和经验哪个更重要?看懂这个可以比别人少奋斗5年!
- 跳不出思维的惯性模式,何谈颠覆?【读历史知创业】
- 你有没有意识到,计算时代已经悄然降临
- 穷人的饥饿思维
- 思维定势
- 关联性思维和给客户展示功能
- 经典的售前思维题目,一个很经典的故事
- 变革思维
- 肯定式探询---组织发展和变革中的积极思维方式
- 从使用Python开发一个Socket示例说到开发者的思维和习惯问题
- 独立思考者模型:避开思维误区的沼泽
- 快速排序里的学问:从猜数字开始
- 从两个回复看男性思维与女性思维的区别
- 编程思想——面向对象架构梦想
- 1.去京城的阻碍 。
- 他们的职业分别是什么?