zoukankan      html  css  js  c++  java
  • 汕头市队赛 SRM 08 A

    比赛没参加 所以回来补题咯 A还是自己YY出来了的 可惜比赛没有打

    描述

    给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T。

    这里的出现定义为存在一串下标 a_1,a_2,...,a_m,满足 a_1<a_2<...<a_m 且 S_{a_i}=T_i

    输入格式

    一行,一个 01 串

    输出格式

    一行,字母 Y 表示存在,N 表示不存在

    样例输入 1

    000

    样例输出 1

    N

    样例输入 2

    010

    样例输出 2

    Y

    数据范围与约定

    • 设串 S 的长度为 n,2leq nleq 5000
    • 数据为随机生成

    样例解释

    第一个样例中,"000"出现了一次([1+2+3]),"00"出现了三次([1+2],[2+3],[1+3]),"0"出现了三次([1],[2],[3])

    第二个样例中,"0"出现了两次

    这道题肯定先特判一波 1 和 0 是否只出现了2次 这是唯一一个T能由单一的1或者0组成的情况

    那么以下 1 0 不存在出现两次的情况了

    然后两个T肯定只有一个位置是不一样的 因为只有这样才会只有两个不一样

    那么我们考虑相邻的两个数 (设为 2 3)

    1. 如果两数相等 那么

    如果1或者4 和他们相等 那么这四个数组成的情况 出现相同的只会是1种或者2种以上

    比如 1110 可能的情况只有 选 1110(1种)或者110(3种) 10(3种)不存在两种的情况

    那么按题目要求 我们肯定是选那种一种的情况 以期待后面有两种的情况

    如果1 和 4 都和 2 3 不等 那么只有两种情况

    1001 0110 这个时候 只要你前后全部选 肯定就有答案了(这个是我瞎jb猜的)

    2 如果两数不等 同理也是不存在两种的情况 然后就可以写了啦

    其实以上的结论都是我猜的 证明什么的可能也不是很好 多多见谅 其实跑得挺快的哈

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    const int M=5007;
    char s[M];
    int cnt,c[M],w[M];
    bool f;
    int main()
    {
        scanf("%s",s+1);
        cnt=strlen(s+1);
        for(int i=1;i<=cnt;i++) c[i]=s[i]-'0',w[c[i]]++;
        if(w[0]==2||w[1]==2){printf("Y
    "); return 0;}
        c[0]=c[cnt+1]=-1;
        for(int i=1;i<cnt;i++)
         if(c[i]==c[i+1]&&c[i-1]!=c[i]&&c[i+1]!=c[i+2]) f=1;
        if(f) printf("Y
    ");
        else printf("N
    ");
        return 0;
    }
    View Code
  • 相关阅读:
    python中函数部分简介与定义(二)
    python中函数部分简介与定义(一)
    db2 不允许在自动存储器表空间上执行 SET TABLESPACE CONTAINERS 命令。的解决办法
    JQuery中$.ajax()方法参数详解
    jquery post 同步异步总结
    js设置height随窗口大小改变
    关于POI的系统整理
    POI 实现导出excel表
    转载>>JQuery EasyUI datagrid 合并表头处理
    iframe标签用法详解(属性、透明、自适应高度)
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7242673.html
Copyright © 2011-2022 走看看