CodeForces - 1350D. Orac and Medians

题目:click
题意:给一段长度为n的区间,你可以操作一段区间排完序之后取这个区间的中位数,这段区间全变中位数的值。在这里插入图片描述问能否把1-n都变为k值。

一开始读错题目了,极其**,注意是一段有序区间的中位数。一开始想先找到k的坐标,找到第一个小于他的数在对个数进行分析判断,但它可以变为比k大的数思路错误。一步步分析,sum为区间中等于k的个数,sum=0时无解,sum=1直接判断,其余情况当等于k的值连续两个,可直接由他展开更新全区间,作为切入点,同理当大于k的连续可展开到等于k的地方,只要区间等于3的大于等于k的个数大于2同理展开。

#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<istream>
#include<vector>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<queue>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
const int MAXN=262144*2+10;
const double PI=acos(-1.0);
const long double eps=1e-12;
int a[100100];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,k,i,j;
        int sum=0;
        scanf("%d %d",&n,&k);
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]==k)
            {
                sum++;
            }
        }
        if(sum==0)
        {
            printf("no\n");
            continue;
        }
        if(n==1&&a[1]==k)
        {
            printf("yes\n");
            continue;
        }
        if(n==1&&a[1]!=k)
        {
            printf("no\n");
            continue;
        }
        a[0]=a[n+1]=0;
        bool flag=false;
        for(i=1;i<=n;i++)
        {
            if((a[i]==k&&i+1<=n&&a[i+1]==k)||(a[i]>=k&&a[i+1]>=k&&i+1<=n))
            {
                flag=true;
                break;
            }
            if(a[i]>=k)
            {
                for(j=1;j<=2;j++)
                {
                    if(a[i+j]>=k&&i+j<=n)
                    {
                        flag=true;
                        break;
                    }
                    if(a[i-j]>=k&&i-j>=1)
                    {
                        flag=true;
                        break;
                    }
                }
                if(flag)
                    break;
            }
        }
        if(flag)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43958964/article/details/106226137
今日推荐