当前位置 博文首页 > Keven_11的博客:C++题解:狼人杀

    Keven_11的博客:C++题解:狼人杀

    作者:[db:作者] 时间:2021-08-18 15:49

    ?????目录

    题目?

    题解


    题目?

    有一天蒜头邀请了包含自己一共?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;
    }

    cs
    下一篇:没有了