CF1350D Orac and Medians(找规律)

Posted zhanglichen

tags:

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

题意:

给出一个序列,每次操作可以选择一段子序列,使得里面的最小的比中位数大的值为t,子序列所有的值都变成这个t。(子序列长度len,中位数(len+1)/2)。

现在给出一个数k,询问能否通过操作把整个序列变成k。

题解:

找规律可以发现,我们需要序列里有一个数是k,同时需要存在两个大于等于k的数同时它们之间的距离要小于等于2。

对n是1的情况特判一下。

#include<bits/stdc++.h>
 
using namespace std;
const int maxn=1e5+100;
int a[maxn];
int n,k;
int main () {
    int t;
    cin>>t;
    while (t--) {
        cin>>n>>k;
        for (int i=1;i<=n;i++) cin>>a[i];
        if (n==1) {
            if (a[1]==k) printf("yes
");
            else printf("no
");
            continue;
        }
        int f=0;
        for (int i=1;i<=n;i++) if (a[i]==k) f=1;
 
        if (!f) {
            printf("no
");
            continue;
        }
        f=0;
        int pre=0;
        for (int i=1;i<=n;i++) {
            if (pre&&a[i]>=k&&i-pre<=2) {
                //printf("%d %d
",pre,i);
                f=1;
            }
            if (a[i]>=k) pre=i;
        }
        if (!f) printf("no
");
        else printf("yes
");
    }
}

 

以上是关于CF1350D Orac and Medians(找规律)的主要内容,如果未能解决你的问题,请参考以下文章

CF-1350 D. Orac and Medians 思维

Orac and Medians

Orac and Medians

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

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

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