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

/*    
结论:显然只要成功操作一次,就可以把整个数组变成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");
    }
}     

 

相关文章:

  • 2022-01-04
  • 2021-09-19
  • 2019-11-09
  • 2021-05-27
  • 2022-01-09
  • 2021-12-14
  • 2021-09-21
猜你喜欢
  • 2021-11-27
  • 2021-07-04
  • 2021-06-28
  • 2018-06-28
  • 2022-12-23
  • 2021-09-30
  • 2022-12-23
相关资源
相似解决方案