zoukankan      html  css  js  c++  java
  • 【思维】思维题——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");
        }
    }     
  • 相关阅读:
    工具类-vim在shell中卡死的情况
    tomcat日志分类
    逻辑运算
    牛客练习赛29 F 算式子
    牛客练习赛29 B
    查询
    hdu 5984
    zoj 4057
    zoj 4056
    zoj 4054
  • 原文地址:https://www.cnblogs.com/zsben991126/p/12894224.html
Copyright © 2011-2022 走看看