博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
习题3-4 Periodic Strings UVA - 455
阅读量:4686 次
发布时间:2019-06-09

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

这个题看着很简单,但是卡了我好几个点。

1.输出格式。题目要求每两个输出数据之间间隔两个换行符,也就是间隔一个空行,而不是空格,最后一个数据只输出一个换行符。一般的方法就能处理过去。

2.极端情况。这种包含对称啊,镜像啊,重叠啊,周期啊,什么的,一定要考虑到如果整个串都不满足条件,应该怎么办。比如说这道题,如果整个串都没有周期,那么应该输出什么呢?我最后一次WA就没考虑到这种情况,其实这时候应该输出整个字符串的长,因为这是可以看做他以他整个自己为周期。

3.字符串切分、连加包含的下标计算。我经常在这里出错,其实,如果容易混淆,就先抽象运行一下最开始的一两次循环,别想当然,仔细思考这个实例是不是没有逻辑错误。其实,只要刚开始的几个没有循环和下标计算错误,后面的出问题的几率几乎为零。

下面是代码,我用的算法是从头开始依次切分,每次切分都循环相加,看是不是最小周期。里面判断最小周期时和字符串无周期时,用了两个小技巧。

#include 
using namespace std;vector
v;int main() { ios::sync_with_stdio(false); cin.tie(0); int n; string s,t; cin>>n; while (n--) { bool flag=false; cin>>s; for (int i=1;i<(int)s.size();i++) { t=s.substr(0,i); int cc=t.size(),ct=1; string ts=t; while (t.size()<=s.size()) { if (t!=s.substr(0,cc*ct)) break; ct++; t+=ts; } if (t==s+ts) { v.push_back(i); flag=true; break; } } if (!flag) v.push_back((int)s.size()); } int si=v.size(); for (int i=0;i

转载于:https://www.cnblogs.com/yichuan-sun/p/9637807.html

你可能感兴趣的文章
引用同一解决方案的类库工程不成功
查看>>
[转]单例模式中为什么用枚举更好
查看>>
selenium 获取断言信息
查看>>
c# 模拟get请求例子,演示Session会话状态。
查看>>
[.net 面向对象程序设计深入](0) 开篇
查看>>
C 多线程学习
查看>>
#Sam有话说#一握在手,话说十年
查看>>
匹配两个空格之间的字符。。。
查看>>
CSS 文字溢出 变成省略号 ...
查看>>
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
Java 文件下载
查看>>
图论——读书笔记 (深度优先搜索)
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>