codeforces #202(div2) C

Posted 罚时自动机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于codeforces #202(div2) C的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 349 div2.c

codeforce div2 C 树状数组

CODEFORCE ROUND #625 DIV2

Codeforces Beta Round #107(Div2)

CodeForce Educational round Div2 C - Vasya and Robot

codeforces educational round 73 div2 ABCD