UVa455 Periodic String 的wronganswer问题探讨,以及AC的新思路
题目的意思是一个字符串有某个长度为k的字符串通过不断重复形成的,而k被称为该字符串的周期。而我们所要做的是找出该字符串的最小周期。
input
The first line is an integer T,That means there are have T test cases; the following T lines are T strings;
output
Each line is an answer,and there a blank line between two answers.
(具体的题目描述请参考原题)
分析:在开始看到这个题目的时候,第一个想到的是从第一个字符开始找,开始假设最小周期min=1;只要对string进行一次遍历,并且在遍历的过程中,以min的间隔分别和字符串开头的min个字符进行比较,如果出现不相同,比如恰巧遍历到j位置,那么min就转化为j+1;启发源于:abcabcabcadcab,在d位置出现了不同,那么min=11;于是便得出了下面的代码:
#include<stdio.h>
#include<string.h>
int main()
{
int T;
char s[81];
int min,t,j,flag;
scanf("%d",&T);
//printf("\n");
for(int i=0;i<T;i++)
{
scanf("%s",s);
int l = strlen(s);
min=1;
for(j=1;j<l;j++)
{
t=j;
for(int k=0;k<min;k++)
{
if(t+k<l)
{
j=t+k;
if(s[k]!=s[j])
{
flag=0;
break;
}
}
}
t=t+min;
if(flag==0)
{
break;
}
}
if(flag==1)
{
break;
}
if(min>l/2)
{
min=l;
break;
}
}
}
if(i==T-1)
printf("%d\n",min);
else
printf("%d\n\n",min);
}
return 0;
}
在一开始,觉得这个思路应该是比较正确的,不会有什么不妥,然而提交的结果是Wronganswer,尽管后期对细节进行了处理,比如周期超过l/2则周期为l;但是都没有通过。
因为wweewwwweeww,这个字符串用上面的思路是绝对行不通的。因此可以肯定上面的wronganswer是思路上错了。
那么可以确保正确的思路又是怎么样的呢?
1.比较明显的特点,周期min必定是strlen(s)的因子,而且是最小的,因此利用一个循环从小到大对strlen(s)的因子进行判定是否符合条件即可,其中需要花些心思的是如何进行判定周期是符合条件的。其实,只要将之后的每一段和第一段进行比较或者在之后的每一段的每个字符进行比较,第一个循环为每个字符的循环,嵌套一个是否相等的循环,用一个flag进行标记,方便外循环的break,因为只要有内循环出现不相等,则外循环之后都不需要进行比较了。
代码应该表较容易写出来。
2.是在第一种思路上和错误的思路相结合的方式。每个循环,其第一个字符必定和s[0],是相等的,因此只要再加上s[j]==s[0]&&l%j==0可以个快速的进行判定。
具体代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int T;
char s[81];
int min,t,j,flag;
scanf("%d",&T);
//printf("\n");
for(int i=0;i<T;i++)
{
scanf("%s",s);
int l = strlen(s);
min=1;
for(j=1;j<l;j++)
{
if(s[j]==s[0]&&l%j==0)
{
min=j;
t=j;
//printf("%d",min);
while(t<=l-min)
{
flag=1;
for(int k=0;k<min;k++)
{
if(t+k<l)
{
if(s[k]!=s[t+k])
{
flag=0;
break;
}
}
}
t=t+min;
if(flag==0)
{
break;
}
}
if(flag==1)
{
break;
}
if(min>l/2)
{
min=l;
break;
}
}
}
if(j>=l)
{
min=l;
}
if(i==T-1)
printf("%d\n",min);
else
printf("%d\n\n",min);
}
return 0;
}
最后,只得一说的是原题在INPUT的内容里加上了T...followed by a blank line,其实并没有起到任何作用,别管就是。在输出时也要注意下输出格式题目就可以解决了。
UVa455 Periodic String 的wronganswer问题探讨,以及AC的新思路的更多相关文章
- UVa455 Periodic Strings
#include <stdio.h>#include <string.h> int main(){ int T, k, len; char str[81], *p, ...
- UVA455 - Periodic Strings(紫书习题3.4)
如果一个字符串可以被某个长度为k的字符串重复多次得到,则称这个字符串的周期为k.例如,字符串"abcabcabcabc"以3为周期(当然,他也以6.12等等为周期). 现在请你编 ...
- string.empty , "" , null 以及性能的比较
一:这种结论,个人觉得仍然存疑 http://www.cnblogs.com/wangshuai901/archive/2012/05/06/2485657.html 1.null null 关 ...
- HDU——2093考试排名(string类及其函数的运用以及istringstream)
考试排名 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDOJ 1358
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- POJ1961[KMP 失配函数]
Period Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 16776 Accepted: 8077 Descripti ...
- POJ 1961 Period( KMP )*
Period Time Limit: 3000MSMemory Limit: 30000K Total Submissions: 12089Accepted: 5656 Description For ...
- [LA3026]Period
[LA3026]Period 试题描述 For each prefix of a given string S with N characters (each character has an ASC ...
- Period[HDU1358]
Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
随机推荐
- ArrayList源码解读
在端午节这个节日里,有一个特殊的任务,我带着你一起揭开"ArrayList"的真面目.从成员变量.构造函数.主要方法三部分,对ArrayList有进一步的认识,希望能够帮助你. 一 ...
- Python教程(2.5)——控制台输入
写Python程序时,你可能希望用户与程序有所交互.例如你可能希望用户输入一些信息,这样就可以让程序的扩展性提高. 这一节我们来谈一谈Python的控制台输入. 输入字符串 Python提供一个叫做i ...
- 【JAVAWEB学习笔记】网上商城实战2:异步加载分类、Redis缓存分类和显示商品
网上商城实战2 今日任务 完成分类模块的功能 完成商品模块的功能 1.1 分类模块的功能: 1.1.1 查询分类的功能: 1.1.2 查询分类的代码实现: 1.1.2.1 创建 ...
- springcloud(十):服务网关zuul
前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...
- 网络编程应用:基于TCP协议【实现文件上传】--练习
要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...
- JavaFx TableView疑难详解
TableView是个十分有用的控件,适应性和灵活性非常强,可以对它进行任意的修改,比如界面样式.功能.本文将从一步步提问的方式讲解TableView 创建已知列的TableView 已知列的表格的创 ...
- python3 简单实现从csv文件中读取内容,并对内容进行分类统计
新手python刚刚上路,在实际工作中遇到如题所示的问题,尝试使用python3简单实现如下,欢迎高手前来优化import csv #打开文件,用with打开可以不用去特意关闭file了,python ...
- 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解
注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...
- APUE-文件和目录(六)函数ftw和nftw
名字 ftw,nftw - 文件树遍历 概要 #include <ftw.h> int nftw(const char *dirpath, int (*fn) (const char *f ...
- vue动画的用法
vue动画 在vue.js中有两种写动画的方法,第一种就是像js里一样,用原生代码来实现,第二种则是使用animate.css的动画类文件,这个动画类和bootstrap.css文件类似,直接调用类就 ...