zoukankan      html  css  js  c++  java
  • XDU 1037 倍流畅序列(字符串匹配+贪心)

    题目描述

    对于一个0,1串s, 从左端开始读取它的0获得序列s0,从右端开始读取它的1获得s1,如果s0与s1同构,则称s为倍流畅序列.
    例如:
    011001是一个倍流畅序列, 因为:
    s0 = 0__00_
    s1 = 1__11_

    而101不是, 因为:
    s0 = _0_
    s1 = 1_1

    下面的问题是:对于一个0、1串s, 在s后添加最少数目的0或1,使它成为一个倍流畅序列。

    输入

    有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T<=100)。
    接下来为T组数据,每组数据占一行,包含一个长度不超过50的0、1串。

    输出

    一共T行。
    对于每组数据,在一行上输出添加了最少数目的0或1后所得到的倍流畅序列。

    #include<cstdio>
    #include<cstring>
    int len,T;
    char s[55],t[55];
    bool check(int x)
    {
        for(int i=x;i<len;i++){
            if(s[i]!=t[i-x])
                return false;
        }
        return true;
    }
    int main()
    {
        scanf("%d",&T);
        while(T--){
            scanf("%s",s);
            len=strlen(s);
            for(int i=0;i<len;i++){
                if(s[i]=='0') t[len-1-i]='1';
                else t[len-1-i]='0';
            }
            t[len]='';
            int temp=0;
            for(int i=0;i<len;i++){
                if(check(i)){
                    temp=len-i;
                    break;    
                }
            }
            printf("%s",s);
            for(int i=temp;i<len;i++)
                printf("%c",t[i]);
            printf("
    ");
        }
    }
     
  • 相关阅读:
    Web开发快速上手
    前端概述
    Python语言进阶
    图像和办公文档处理
    网络编程
    进程和线程
    正则表达式
    面向对象进阶
    面向对象
    js 获取指定时间上月26 ,
  • 原文地址:https://www.cnblogs.com/freinds/p/6446535.html
Copyright © 2011-2022 走看看