zoukankan      html  css  js  c++  java
  • 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
    ");
        }
    }
  • 相关阅读:
    Docker镜像和容器
    Docker介绍
    Ansible实战:部署分布式日志系统
    Ansible之roles介绍
    Ansible之tags介绍
    Ansible之迭代、模板
    linux jenkins安装(四)
    linux maven安装(三)
    linux tomcat安装(二)
    linux JDK安装(一)
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12942647.html
Copyright © 2011-2022 走看看