思维思维题——cf1350D

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维思维题——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");
    }
}     

 

以上是关于思维思维题——cf1350D的主要内容,如果未能解决你的问题,请参考以下文章

cf1025c 思维题

E. Magic Stones CF 思维题

树上思维题——cf1060E

CF1215 C Swap Letters(思维题)

CF 750C New Year and Rating(思维题)

CF 763A Timofey and a tree(思维题)