博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XidianOJ 1037 倍流畅序列
阅读量:5277 次
发布时间:2019-06-14

本文共 1477 字,大约阅读时间需要 4 分钟。

题目描述

对于一个0、1串s, 从左端开始读取它的0获得序列s0,从右端开始读取它的1获得s1,如果s1与s2同构,则称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后所得到的倍流畅序列。

--正文
字符串的长度为len
直接遍历当前字符串满不满足,不满足就加一位(最多也就是len个)
#include 
#include
#include
#include
using namespace std;char str[1000];int main(){ int time,T; scanf("%d",&T); for (time=1;time<=T;time++){ scanf("%s",str); int now = 0,len = strlen(str); int delta = 0; bool ok = false; while (!ok){ if (delta == len) break; while ( now+delta <= len-1-now) { //printf("%d %d\n",now+delta,len-1-now); if ((str[now+delta] - '0') ^ (str[len-1-now] - '0') == 1) { now ++; } else { now = 0; delta ++; break; } } if (now != 0) ok = true; } //printf("%d\n",delta); printf("%s",str); int i; for (i=1;i<=delta;i++){ char ch = (str[delta-i] - '0') ^ 1; //printf("%c %c\n",str[delta-i],ch+'0'); printf("%c",ch+'0'); } printf("\n"); } return 0;}

 

转载于:https://www.cnblogs.com/ToTOrz/p/6137813.html

你可能感兴趣的文章
数据库01 /Mysql初识以及基本命令操作
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
CF461B Appleman and Tree
查看>>
CF219D Choosing Capital for Treeland
查看>>
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>