目录
题目
有一天蒜头邀请了包含自己一共 n 位朋友玩狼人杀游戏。狼人杀游戏每一局需要有 n - 1 位玩家和 1 位上帝,上帝不参与游戏负责监督和提供信息,所大家都不愿意当上帝。
现在蒜头知道第 i 个朋友至少想当 a_i 次玩家,那最少要玩多少局狼人杀才能满足大家的要求?请你帮蒜头计算一下。
输入格式
输入第一行一个整数 n(3≤n≤105) 表示朋友人数。
接下来一行输入 n 个空格分割的整数 a1,⋯,an(1≤ai≤10^9)。
输出格式
输出最少需要玩多少局狼人杀。
输出时每行末尾的多余空格,不影响答案正确性
要求使用「文件输入输出」的方式解题,输入文件为
wolf.in
,输出文件为wolf.out
样例输入1
3 3 2 2样例输出1
4样例输入2
4 2 2 2 2样例输出2
3
题解:
知识点:数学
分析:一局游戏只能提供 n-1 个游戏位置,而一共需要 s=a1+a2+……+an 个游戏位置,所以至少需要 ⌈s/(n+1) ⌉ 局游戏。但是一个人不可能在一局游戏中占连个位置,所以至少又需要 max{ai} 局游戏。两者(⌈s/(n+1) ⌉和max{ai})取大就是答案。要注意用long long数据类型和转换成浮点数再计算
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;//注意用long long
LL x,sum,mx;
int main(){
freopen("wolf.in","r",stdin);
freopen("wolf.out","w",stdout);
int n;
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%lld",&x);
sum+=x;
mx=max(mx,x);//取最大值
}
LL ans=ceil(1.0*sum/(n-1.0));//注意要*1.0,转换成浮点数计算,还要加上取整函数
printf("%d",max(ans,mx));//取最大值
return 0;
}