【思维】思维题——cf1350D

很有意思的题目,感觉看智商。。

/*    
结论:显然只要成功操作一次,就可以把整个数组变成k
如何找到这一次操作?
    把<k,=k,>k的数变成0 1 2 
    显然只要存在11,12,101,102,这种类型,就必定可以操作成功一次
    结论:只要存在1,且存在|i-j|<=2 && ai>=1 && aj>=1,就可以成功 
*/    
#include<bits/stdc++.h>
using namespace std;
#define N 100005
    
int n,k,a[N]; 

int main(){
    int t;cin>>t;
    while(t--){
        cin>>n>>k;
        for(int i=1;i<=n;i++)cin>>a[i];
        int f=0;
        for(int i=1;i<=n;i++)if(a[i]==k)f=1;
        if(!f){puts("no");continue;}
        if(n==1){puts("yes");continue;}
        
        for(int i=1;i<=n;i++)
            if(a[i]<k)a[i]=0;
            else if(a[i]==k)a[i]=1;
            else a[i]=2; 
        int last=0;
        f=0; 
        for(int i=1;i<=n;i++)if(a[i]>=1){
            if(!last)last=i;
            else {
                if(i-last<=2)f=1;
                last=i;
            }
        }
        if(f)puts("yes");
        else puts("no");
    }
}     
原文地址:https://www.cnblogs.com/zsben991126/p/12894224.html