记录编号 |
414854 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[51nod 1129] 字符串最大值 |
最终得分 |
100 |
用户昵称 |
Hallmeow |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.019 s |
提交时间 |
2017-06-15 10:14:00 |
内存使用 |
1.80 MiB |
显示代码纯文本
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define pos2(i,a,b) for(int i=(a);i>=(b);i--)
#define N 1010000
using namespace std;
char a[N];
int len;
int cnt[N];
int fail[N];
void getfail()
{
int k=0;
fail[0]=fail[1]=0;
pos(i,2,len)
{
while(k&&a[k]!=a[i-1])
k=fail[k];
if(a[k]==a[i-1])
k++;
fail[i]=k;
}
}
int haha()
{
freopen("string_maxval.in","r",stdin);
freopen("string_maxval.out","w",stdout);
scanf("%s",a);
len=strlen(a);
getfail();
pos2(i,len,1)
{
cnt[i]++;
cnt[fail[i]]+=cnt[i];
}
long long ans=0;
pos(i,1,len)
{
if(i*cnt[i]>ans)
ans=i*cnt[i];
}
printf("%lld",ans);
//while(1);
return 0;
}
int sb=haha();
int main()
{;
}