Codeforces Round #775 (Div. 2) ABCD题解

Posted ZZXzzx0_0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #775 (Div. 2) ABCD题解相关的知识,希望对你有一定的参考价值。

A. Game

题意
n 个 只 包 含 0 和 1 的 数 组 , 你 一 开 始 在 a [ 1 ] 位 置 , 求 走 到 a [ n ] 位 置 的 最 小 代 价 n个只包含0和1的数组,你一开始在a[1]位置,求走到a[n]位置的最小代价 n01,a[1]a[n]
如 果 a [ i ] = a [ i + 1 ] = 1 , 你 可 以 从 i 走 到 i + 1 , 代 价 为 0 如果a[i]=a[i+1]=1,你可以从i走到i+1,代价为0 a[i]=a[i+1]=1,ii+1,0
如 果 a [ i ] = a [ j ] = 1 [ i < j ] , 你 可 以 从 i 走 到 j , 代 价 为 j − i , 只 能 走 一 次 如果a[i]=a[j]=1[i<j],你可以从i走到j,代价为j-i,只能走一次 a[i]=a[j]=1[i<j],ij,ji,
思路
因 为 第 二 种 走 法 只 能 走 一 次 因为第二种走法只能走一次
所 以 找 到 第 一 个 连 续 的 一 的 最 后 一 个 位 置 L 所以找到第一个连续的一的最后一个位置L L
和 最 后 一 个 连 续 的 一 的 第 一 个 位 置 R 和最后一个连续的一的第一个位置R R
答 案 即 为 R − L 答案即为R-L RL
时间复杂度 O n On On

int n ;
int a[N] ;
 
signed main()

    cf
    
        cin >> n ;
        fer(i,1,n) sf(a[i]) ;
        
        int l = -1 , r = -1 ;
        fer(i,1,n)
        
            if(!a[i]) 
            
                l = i - 1 ;
                break ;
            
        
        der(i,n,1)
        
            if(!a[i])
            
                r = i + 1 ;
                break ;
            
        
        
        de(r - l) ;
    
    return 0 ;

B. Game of Ball Passing

题意
给 你 一 个 n 个 数 的 数 组 , a [ i ] 表 示 i 这 个 人 传 了 a [ i ] 次 球 给你一个n个数的数组,a[i]表示i这个人传了a[i]次球 n,a[i]ia[i]
现 在 问 你 进 行 了 最 少 多 少 次 传 球 使 得 所 有 人 都 可 以 传 完 现在问你进行了最少多少次传球使得所有人都可以传完 使
每 次 传 球 从 任 意 一 个 人 开 始 , 只 要 传 给 除 他 之 外 的 人 即 可 每次传球从任意一个人开始,只要传给除他之外的人即可 ,
思路
把 每 次 传 球 转 化 一 下 把每次传球转化一下
等 价 于 首 先 选 一 个 i , 使 a [ i ] − 1 等价于首先选一个i,使a[i]-1 i使a[i]1
然 后 在 任 意 选 2 个 不 同 的 下 标 i , j , 使 a [ i ] − 1 , a [ j ] − 1 , 可 以 进 行 无 数 次 然后在任意选2个不同的下标i,j,使a[i]-1,a[j]-1,可以进行无数次 2i,j,使a[i]1,a[j]1,

不 考 虑 首 先 选 一 个 i , 使 a [ i ] − 1 的 情 况 下 不考虑首先选一个i,使a[i]-1的情况下 i使a[i]1
记 录 一 下 数 组 总 和 s u m 和 数 组 最 大 值 m a x v 记录一下数组总和sum和数组最大值maxv summaxv
如 果 s u m − m a x v > = m a x v 如果sum-maxv>=maxv summaxv>=maxv
说 明 一 次 传 球 即 可 说明一次传球即可

考 虑 首 先 选 一 个 i , 使 a [ i ] − 1 的 情 况 下 考虑首先选一个i,使a[i]-1的情况下 i使a[i]1
那 我 们 二 分 进 行 了 多 少 次 传 球 m i d 那我们二分进行了多少次传球mid mid
如 果 m i d 次 可 以 传 球 成 功 , 说 明 m i d 可 以 变 小 如果mid次可以传球成功,说明mid可以变小 mid,mid
否 则 m i d 变 大 否则mid变大 mid

m i d 次 传 球 , 等 价 于 你 可 以 先 进 行 m i d 次 选 一 个 i , 使 a [ i ] − 1 mid次传球,等价于你可以先进行mid次选一个i,使a[i]-1 mid,midi使a[i]1
然 后 在 任 意 选 2 个 不 同 的 下 标 i , j , 使 a [ i ] − 1 , a [ j ] − 1 , 可 以 进 行 无 数 次 然后在任意选2个不同的下标i,j,使a[i]-1,a[j]-1,可以进行无数次 2i,j,使a[i]1,a[j]1,

即 s u m − m a x v > = m a x v − m i d 即 可 即sum-maxv>=maxv-mid即可 summaxv>=maxvmid

时间复杂度 O n On On

int n ;
int a[N] ;
int s , v ;
 
int get(int mid)

    if(s - v >= v - mid) return 1 ;
    
    return 0 ;

 
signed main()

    cf
    
        cin >> n ;
        fer(i,1,n) sf(a[i]) ;
        
        s = 0 , v = 0 ;
        fer(i,1,n) s += a[i] , v = max(v , a[i]) ;
        
        if(!v)
        
            puts("0") ;
            continue ;
        
        
        int l = 1 , r = 1e10 ;
        while(l < r)
        
            int mid = l + r >> 1 ;
            if(get(mid)) r = mid ;
            else l = mid + 1 ;
        
        
        de(l) ;
    
    return 0 ;

C. Weird Sum

题意
给 你 一 个 n ∗ m 的 方 格 , 每 个 方 格 c [ i ] [ j ] 都 有 一 个 颜 色 k , 求 给你一个n*m的方格,每个方格c[i][j]都有一个颜色k,求 nm,c[i][j]k,
∑ k = 1 1 e 5 ∑ x 1 = 1 n ∑ y 1 = 1 m ∑ x 2 = i + 1 n

以上是关于Codeforces Round #775 (Div. 2) ABCD题解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #775 (Div. 2) ABCD题解

Codeforces Round #775 (Div. 2) ABCD题解

Codeforces Round #775 (Div. 2) ABCD题解

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)(ABCDE)

Codeforces Round #774 (Div. 2)(ABCDE)

Codeforces Round #436 E. Fire(背包dp+输出路径)