zoukankan      html  css  js  c++  java
  • codeforces #202(div2) C

    题意:一个party共n个人,要玩一个游戏,这个游戏每轮需要一个裁判,剩下的人参与,第i个人想要在不当裁判的情况下玩ai轮,求在满足所有人愿望的时候,最少玩的轮数

    分析:最少的轮数肯定是个人最大轮数+1,如果轮数确定,那么轮数-ai就是该玩家在满足自身的情况下当裁判的最大次数,如果所有人能当裁判的轮数>=要玩的轮数,那么就是一个答案

    只要找到最小的那个就好了,先找到最大的ai,然后把ai+1当作最小的轮数,计算裁判的次数,如果每再增加一轮游戏,能当裁判的次数要+n,

    从ai+1枚举轮数,或者二分轮数,判断所有人能当裁判的总轮数>=要玩的轮数就可以了

    我用的二分法

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+5;
    int n,d[maxn];
    typedef long long ll; 
    ll tmp=0,l=0,r=1e13,res,L;
    
    inline bool solve(ll m){
        ll t=tmp+(m-L)*n;
        return t>=m;
    }
    
    int main(){
        
        cin>>n;
        for(int i=0;i<n;i++)cin>>d[i],l=max(l,(ll)d[i]);
        L=l;
        for(int i=0;i<n;i++)tmp+=l-d[i];
        
        while(l<=r){
            ll mid=l+(r-l)/2;
            if(solve(mid))res=mid,r=mid-1;
            else l=mid+1;
        }
        
        cout<<res<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    数组_leetcode283
    数组_leetcode438
    数组_leetcode215
    数组_leetcode167
    数组_leetcode209
    数组_leetcode88
    数组_leetcode80
    数组_leetcode76
    数组_leetcode75
    数组_leetcode27
  • 原文地址:https://www.cnblogs.com/jihe/p/6574703.html
Copyright © 2011-2022 走看看