2566. [51nod 1129] 字符串最大值
2024-09-30 06:00:37
【题目描述】
一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。
给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。
例如:S = "abababa" 所有的前缀如下:
"a", 长度与出现次数的乘积 1 * 4 = 4,
"ab",长度与出现次数的乘积 2 * 3 = 6,
"aba", 长度与出现次数的乘积 3 * 3 = 9,
"abab", 长度与出现次数的乘积 4 * 2 = 8,
"ababa", 长度与出现次数的乘积 5 * 2 = 10,
"ababab", 长度与出现次数的乘积 6 * 1 = 6,
"abababa", 长度与出现次数的乘积 7 * 1 = 7. 其中"ababa"出现了2次,二者的乘积为10,是所有前缀中最大的
【输入格式】
输入字符串T, (1 <= L <= 1000000, L为T的长度),T中的所有字符均为小写英文字母。 (注意:原题是L <= 10W,这里加强一下!)
【输出格式】
输出所有前缀中字符长度与出现次数的乘积的最大值。
【样例输入】
abababa
【样例输出】
10
【提示】
【来源】
这题也是醉了啊,。。
一开始看到这题的数据范围的时候就感觉有点诡异
然后写了个裸的KMP果不其然只得60分
后来看了一下老师的题解发现根本不用跑KMP,
只要从后往前扫一遍将i和P[i]的值分别计算一下就可以
可是还是有两个点超时
搞了半天才发现原来三目运算符要比if快很多!!!!
坑爹啊。。。、,!!!!=.=
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[];
int p [];
int cs[];
int la,lb;
int ans=-;
void makep()
{
p[]=-;
int j=;
for(int i=;i<la;i++)
{
j=p[i-];
while(a[i]!=a[j+]&&j>=)j=p[j];
p[i]=a[i]==a[j+]?j+:-;
}
}
int main()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
gets(a);
la=strlen(a);
makep();
for(int i=la-;i>=;i--)
{
cs[i]++;
cs[p[i]]+=cs[i];
if(cs[i]*(i+)>ans)
ans=cs[i]*(i+);
}
printf("%d",ans);
return ;
}
最新文章
- iOS_UIImage_jpg<;-->;png转换
- Freemarker的初次使用之FTL标签嵌套与map的使用
- Android必会小功能总结
- 动态加载JS脚本的4种方法
- Apache提示You don&#39;t have permission to access / on this server问题解决
- jquery ajax提交json格式的数据,后台接收并显示各个属性
- 让2个并列的div根据内容自动保持同等高度js
- SWIFT学习笔记01
- Linux 多进程多线程相关概念
- Tmux 入门
- Scrapy案例01-爬取传智播客主页上的老师信息
- 第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。
- adb.exe 已停止工作解决办法
- 防cc攻击策略
- 小奶狗给小喵咪上CSS课程
- 计算概论(A)/基础编程练习1(8题)/3:晶晶赴约会
- linux查看各服务状态以及开启和关闭
- Unity3d Http Get请求
- [sql]MySQL数据备份小结
- before伪类的超有用应用技巧——水平菜单竖线分隔符
热门文章
- shell之sort和uniq 及wc 的使用
- [HAOI 2012] Road
- [APIO 2017] 商旅
- Ubuntu18.04 安装 JDK7
- main.o: In function `__static_initialization_and_destruction_0′:
- centos时区
- TypeScript完全解读(26课时)_4.TypeScript完全解读-接口
- Linux系统调用及其效率
- 51nod1640 【最小生成树】
- [Xcode 实际操作]一、博主领进门-(15)读取当前应用的信息