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
  • 相关阅读:
    nRF5 SDK for Mesh(二) Getting started 快速开始
    QT 简单 TCP 通信,发送数据到服务器
    Bluetooth® Low Energy Beacons
    CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用
    LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 前提
    R 语言入门
    Django 框架
    Windows 下 Django 安装
    windows 下搭建 git 服务器 copssh+git
    python Pystaller 将python文件打包成exe
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7242673.html
Copyright © 2011-2022 走看看