暂无连接

字符串最大值

【问题描述】

少年易学老难成,一寸光阴不可轻。

一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcdabcdabcd 的所有前缀为a,ab,abc,abcda,ab,abc,abcda, ab, abc, abcd。

给出一个字符串 SSS,求其所有前缀中,字符长度与出现次数的乘积的最大值。

例如:S="abababa"" role="presentation" style="position: relative;">S="abababa"S="abababa"S = "abababa" 所有的前缀如下:

"a""a""a", 长度与出现次数的乘积 1∗4=41∗4=41 * 4 = 4,
"ab""ab""ab",长度与出现次数的乘积 2∗3=62∗3=62 * 3 = 6,
"aba""aba""aba", 长度与出现次数的乘积 3∗3=93∗3=93 * 3 = 9,
"abab""abab""abab", 长度与出现次数的乘积 4∗2=84∗2=84 * 2 = 8,
"ababa""ababa""ababa", 长度与出现次数的乘积 5∗2=105∗2=105 * 2 = 10,
"ababab""ababab""ababab", 长度与出现次数的乘积 6∗1=66∗1=66 * 1 = 6,
"abababa""abababa""abababa", 长度与出现次数的乘积 7∗1=77∗1=77 * 1 = 7。

其中”ababa”出现了 222 次,二者的乘积为 10" role="presentation" style="position: relative;">101010,是所有前缀中最大的。

【输入格式】

输入字符串 TTT,T" role="presentation" style="position: relative;">TTT 中的所有字符均为小写英文字母。

【输出格式】

输出所有前缀中字符长度与出现次数的乘积的最大值。

【输入样例】

abababa

【输出样例】

10

【样例说明】

ababaababaababa 出现了两次

【数据范围】

对 20%20%20\%的输入数据 :1<=L<=1001<=L<=1001 ;

对 40%40%40\%的输入数据 :1<=L<=10001<=L<=10001 ;

对 50%50%50\%的输入数据 :1<=L<=50001<=L<=50001 ;

对 100%100%100\%的输入数据 :1<=L<=10000001<=L<=10000001 , LLL 为 T" role="presentation" style="position: relative;">TTT 的长度。

数据非常有梯度。

题解

AC自动机天下第一,KMP辣鸡。

直接插入原串再用原串匹配一下,匹配完后拓扑递推一下即可统计答案。

但是裸的ACAC\mathcal{AC}自动机会MLEMLE\mathcal{MLE},因为TrieTrie\mathcal{Trie}退化成了一条链,所以就不用开M×26M×26M\times 26了。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+5;
char ch[M];
int len,tot,t[M],fail[M],son[M],nxt[M];
queue<int>dui;
void in(){scanf("%s",ch+1);}
void ins()
{int v=0,s;for(int i=1;i<=len;++i){s=ch[i]-'a';if(!son[v])son[v]=++tot;nxt[v]=s,v=son[v];}
}
void bfs()
{int v,p;dui.push(0);while(!dui.empty()){v=dui.front();dui.pop();for(int i=0;i<26;++i){if(nxt[v]!=i)continue;if(!v)fail[son[v]]=0;else{for(p=fail[v];~p;p=fail[p])if(nxt[p]==i){fail[son[v]]=son[p];break;}if(p==-1)fail[son[v]]=0;}if(son[v])dui.push(son[v]);}}
}
void cmp()
{int v=0,s,p;for(int i=1;i<=len;++i){s=ch[i]-'a';while(v&&nxt[v]!=s)v=fail[v];if(nxt[v]==s)v=son[v];++t[v];}
}
void ac()
{len=strlen(ch+1);fail[0]=-1;ins();bfs();cmp();long long ans=0;for(int i=len;i>=1;--i)t[fail[i]]+=t[i],ans=max(ans,1ll*i*t[i]);printf("%lld",ans);
}
int main(){in();ac();}

[2018.07.17 T1] 字符串最大值相关推荐

  1. 2018.07.17【省赛模拟】模拟B组 比赛总结

    题目 [GDKOI2003]最大公共子串 [题目描述] 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下的字符按原来的顺序组成的串是该串的字串.例如:"", &q ...

  2. 2018.07.17【省赛模拟】模拟B组 比赛题解(总结)

    今天一看排名,what the,又垫底了,新初二第一YYT287.5,第二WYD120 T1: 最大公共子串 分类讨论+DP 题目描述 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩 ...

  3. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...

  4. 【跃迁之路】【530天】刻意练习系列289(2018.07.20)

    @(跃迁之路)专栏 叨叨两句 技术的精进不能只是简单的刷题,而应该是不断的"刻意"练习 该系列改版后正式纳入[跃迁之路]专栏,持续更新 一.语言练习 SQL [跃迁之路]SQL语句 ...

  5. 2018.10.17考试

    2018.10.17考试总结 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡, 但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关, ...

  6. 2018.07.19 仿优酷网页小项目

    时间:2018.07.19 大一下学期暑假 地点:成都-实习 项目类型:HTML+CSS仿优酷网页 制作时间:两天 网页源码: <!doctype html> <html> & ...

  7. C# 2018.9.17

    C# 2018.9.17 C#的优点: 1,不会有运行时崩溃,解决了C++的痛点一,难预防,难查错 2,使用文件不需要包含进来,只需要using namespace即可,解决了C++的痛点二,包含复杂 ...

  8. 2018.07.30 巴别时代

    * 项目部署更新 用符号链接 project => project1, project2 ln -s project2 project * composer自动加载机制 namespace =& ...

  9. 信息学奥赛一本通 2050:【例5.20】字串包含 | OpenJudge NOI 1.17 19:字符串移位包含问题

    [题目链接] ybt 2050:[例5.20]字串包含 OpenJudge NOI 1.17 19:字符串移位包含问题 [题目考点] 1. 字符串 2. 判断一个字符串是不是另一个字符串的子串(字符串 ...

  10. 训练日志 2018.9.17

    搞虚拟机把电脑搞坏了...送去修了近一个周...现在还没拿回来... 这一周除了看了看算法书,别的啥都没干,比赛临近,该整理的模板什么都还没整理... 今天还因办事不周被教练骂了,说要撤我职,慌得一批 ...

最新文章

  1. Python实现一元及多元线性回归
  2. zabbix监控添加psql数据库和sql_server数据库模板
  3. Spring Security 实战:自定义异常处理
  4. 你知道怎么在生产环境下部署tomcat吗?,灵魂拷问
  5. C++多态:多态实现原理剖析,虚函数表,评价多态,常见问答与实战【C++多态】(55)
  6. #region 常量和静态变量静态类readonly
  7. css property 和 attribute 的区别
  8. SSIS 学习之旅 FTP访问类
  9. 一般动态规划问题合集(Leetcode题解-Python语言)
  10. jqgrid mvc_将JQGrid与Spring MVC和Gson集成
  11. solidity开发以太坊代币智能合约
  12. lucene api
  13. sql 拼接int类型的字段_这才是SQL优化的正确姿势!
  14. 简单神经网络_mnist
  15. TurboDrive技术
  16. ZUL页面注解语法与Java注解语法
  17. PowerShell设置环境变量
  18. 为什么大多数程序员没有工程思维
  19. 量化交易100个知识点 重新认识 ROE(净资产收益率)的风险和竞争优势
  20. 自动机器学习-H2O.ai

热门文章

  1. 解析几何 | 吕子根 设三平行平面 $\pi_i:\ Ax+By+Cz+D_i=0\,(i=1,2,3),L,M,N$ 依次是平面 $\pi_1,\pi_2,\pi_3$ 上的任意点,求 $\tria
  2. latex 常用学习/模板/公式输入网站合集
  3. 痕迹清理 - Windows
  4. 简单的解决nginx转发WebSocket问题
  5. mysql数据库升幂_斯特林数
  6. 子组件触发父组件的方法
  7. [预打印]使用vbs给PPT(包括公式)去背景
  8. 线性表的链式存储结构-----链表
  9. SpringMVC中请求的转发和重定向
  10. 熟练掌握各种MQ?那面试官很可能用这道题目先摸摸你的老底!