1466:【例题2】Power Strings

news/2024/12/11 22:49:59/

题意:

定义a为一个字符串,aa表示两个字符相连,即 an+1=aan ,也就是出现循环了。给定一个字符串,若将其表示成an,问n最大为多少?

思路:

如果完全不循环,顶多就是类似于abc1这样,即n=1。但是如果循环出现了,比如abab,那就可以表示成(ab)2。还有一点,就是要使得n尽量大,那么当出现abababab时,应该要这么表示(ab)4,而不是(abab)2。

此题用神奇的KMP解决,也就是主要利用next数组。举例说明。

一般出现循环的都会大概是这样的:abcabcabc。而这样是没有出现循环的:ababa,5个数字,质数,怎样都不会循环啦。那么下面就拿abcabcabc来举例。

abcabcabc的next数组表示成:

next[09]={-1,0,0,0,1,2,3,4,5,6}对吧?但是我们通常用的只是next[08]而已,现在next[9]派上用场了。here comes…

若len%(len-next[len])==0,则最小循环节为len/(len-next[len]),否则为1。为虾米?

首先是,这两小段是匹配的,对吧?根据next数组都能看出来啦。

abcabcabc

abcabcabc

接着,因为次串next[9]=6,那么len-next[9]=3,也就是说串头还剩下3个字符,说的就是"abc"。如果喔,len%(len-next[len])=9%(9-6)=9%3=0呢,最小循环节浮现了,就是串头"abc",又为虾米? 拆串来看看呗:

abc abc abc

我将他们3个子串分别命名为A和B和C。

既然next[9]说明了s[9]的前面居然有6个和串头匹配,那么AB=BC,自然B=A啦(再看next去)。也就是说如果除了串头A,剩下的字符BC都能够是A的个数的倍数,这事就成了。只要不是倍数,那么就没什么循环的可能了。

A刚好3个字符,后面的BC加起来是6个,刚好是3的倍数,会循环。

可以搭配这篇文章继续看:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html

 1 #include <bits/stdc++.h>2 #define LL long long3 #define pii pair<int,int>4 #define INF 0x7f7f7f7f5 using namespace std;6 const int N=1000010;7 8 char qstr[N];9 int qnext[N];
10 
11 void get_next(int len)
12 {
13     qnext[0]=-1;
14     int i=0;
15     int j=-1;   //模式串
16     while(i<len)
17     {
18         if(j==-1||qstr[j]==qstr[i])   qnext[++i]=++j;
19         else    j=qnext[j];
20     }
21 }
22 
23 int main()
24 {
25     freopen("input.txt", "r", stdin);
26     while(scanf("%s",qstr),qstr[0]!='.')
27     {
28         int len=0;
29         get_next(len=strlen(qstr));
30 
31         int ans=len%(len-qnext[len])==0?len/(len-qnext[len]):1;
32         printf("%d\n",ans);
33     }
34     return 0;
35 }AC代码

http://www.ppmy.cn/news/473777.html

相关文章

从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)

目录 1. priority_queue的模拟实现 1.1 未完全的priority_queue 1.2 迭代器区间构造和无参构造 1.3 仿函数的介绍和使用 1.4 完整priority_queue代码&#xff1a; 1.5 相关笔试选择题 答案&#xff1a; 2. 反向迭代器 2.1 反向迭代器的普通实现 reverse_iterator.h&a…

测试面试的流程

1 测试流程&#xff1f; 项目启动后&#xff0c;测试人员尽早找开发人员拿到接口文档&#xff0c;获取接口文档后进行接口用例的编写和调试&#xff0c; 完成后部署到持续集成的测试环境中&#xff0c;进行接口的日常监控&#xff0c; 定期对接口脚本的维护更新&#xff0c;接…

这个是我18年整理的,之前在我的电子笔记,现在感觉还是需要分享写写博客大家互相学习更好

** 总结功能测试面试常见问题 ** 一、接口测试需要注意什么&#xff1f; 1、 注意数据清理 在写脚本后注意及时清理接口测试过程中&#xff0c;向数据库或实时搜索中插入的数据&#xff0c;以免脚本的持续运行&#xff0c;会对数据库和实时搜索造成不必要的负担。 2、 在编写…

如何规划一款AI硬件产品(以人脸识别考勤门锁为例)_团员分享_@ocean

前言&#xff1a;本文作者团员ocean&#xff0c;分享了很多来自实战的内容&#xff0c;特别是人脸识别考勤门禁一体机的需求分析&#xff0c;以及人脸识别算法指标&#xff08;准确率、召回率、误识率、拒识率、ROC曲线和识别速度&#xff09;&#xff0c;大家能直接借鉴到自己…

用例设计

1.支付用例&#xff1a; 金额框填写校验&#xff1a;只能是数字/小数点两位/金额为空/边界值校验&#xff1a;大于小于等于负数 支付方式&#xff1a;余额&#xff08;余额不足&#xff09;/第三方支付&#xff1a;密码填写错误/未安装第三方支付app→跳转或者提示/转账汇款&am…

测试用例题目

http://www.51testing.com/html/02/n-3724002.html https://blog.csdn.net/slforeverlove/article/details/47080279 https://blog.csdn.net/firefly_2002/article/details/7912482 https://blog.csdn.net/maomaomao425/article/details/61208586 1.商品打折返回折扣 假设京…

python全栈之路—十分钟搞定面向对象-类的结构-类的空间问题,建议收藏

面向对象本节整理知识点 面向过程编程vs函数式编程 面向对象初识函数式编程vs面向对象编程类的结构 从类名的角度研究类类名操作静态属性类名操作动态方法 从对象的角度研究类什么是对象对象操作对象空间属性对象查看类中的属性对象操作类中的方法self 是什么?一个类可以实例…

【转】测试用例题目

http://www.51testing.com/html/02/n-3724002.htmlhttps://blog.csdn.net/slforeverlove/article/details/47080279https://blog.csdn.net/firefly_2002/article/details/7912482https://blog.csdn.net/maomaomao425/article/details/61208586 1.商品打折返回折扣 假设京东有…