Codeforces Round #641 (Div. 2)D. Orac and Medians

Posted Lnn.

tags:

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

前言:好久没写题解了,虽然一直在刷,但是懒。。


题目传送门

D. Orac and Medians
  题目类型:思维、中位数、转换。
  解析:从最简单的想:选两个数,那么会转换为较小的数,只要有一个≥k的数在k旁边,就能整出2个连续k。那么就可以选两个k加一个其他数,一起变成k,重复就全部变成k了。
  如果k旁边的数都小于k,那么可以让≥k的数靠近k。
  设x≥k,问题就转化为整出连续的(≥2)x。那么要求3个数中要有2个≥k,4个中有3个,5个中有3个…可以发现3个中有2个是整出连续x的充分必要条件。(4个中有3个,5个中有3个…是包含3个中有2个的(鸽巢平分))。
  所以就看是否存在3个中有两个≥k的,特判n==1

  code:

void solve(){
    ll flag = 0;
    for(ll i = 1 ; i <= n ; ++i)
        flag += (a[i] == k);
    if(!flag)cout << "NO" << endl ;
    else if(n == 1)cout << "YES" << endl ;
    else {
        for(ll i = 1 ; i <= n ; ++i){
            ll sum = 0;
            for(ll j = i ; j <= n && j <= i+2 ; ++j)
                sum += (a[j] >= k);
            if(sum >= 2){
                cout << "YES" << endl ;
                return;
            }
        }
        cout << "NO" << endl ;
    }
}

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

Codeforces Round #641 (Div. 2)D. Orac and Medians

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

[ACM]Codeforces Round #534 (Div. 2)

Codeforces 641E

Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)

Codeforces Global Round 19