51Nod-1277 字符串中的最大值
2018-01-16 16:58
288 查看
思路:求出next数组,倒着推一边,把所有前缀出现的次数求出来。然后注意往前传值的时候注意一个小优化,否则会TLE。
#include <cstdio>
#include <cstring>
#define max(a,b) ((a)>(b)?(a):(b))
typedef long long ll;
const int maxn = (int)1e5 + 10;
char s[maxn];
int next[maxn];
void getNext(char p[]) {
int m = strlen(p + 1);
next[1] = 0;
for(int k = 0 , i = 2 ; i <= m ; i++) {
while(k > 0 && p[k + 1] != p [i] ) k = next[k];
if(p[k + 1] == p[i]) k++;
next[i] = k;
}
}
int dp[maxn];
int len;
int main(void) {
scanf("%s", s + 1);
getNext(s);
len = strlen(s + 1);
for(int i = len ; i >= 1 ; i--) {
dp[i]++;
/* int temp = next[i];
while(temp) {
dp[temp]++;
temp = next[temp];
} */
dp[next[i]] += dp[i];
}
ll ans = 0;
for(ll i = 1 ; i <= len ; i++) {
ans = max(i * dp[i] , ans);
}
printf("%lld\n", ans);
return 0;
}
相关文章推荐
- 51nod-1277 字符串中的最大值(KMP)
- 51nod 1277 字符串中的最大值(KMP)
- [KMP next树] 51Nod 1277 字符串中的最大值
- 字符串中的最大值 51Nod - 1277[DP+KMP]
- 51nod 1277 字符串中的最大值
- 51Nod 1277 字符串中的最大值【Dp+set_next】
- 51Nod 1277 字符串中的最大值 KMP next数组经典应用
- 51nod 1277 字符串中的最大值(kmp)
- 51NOD 1277 字符串中的最大值 【拓展KMP】
- kmp-51nod 1277 字符串中的最大值
- 51Nod 1277 字符串中的最大值(KMP,裸题)
- 【Kmp求字符串前缀在字符串出现的次数】51nod 1277 字符串中的最大值
- 【KMP next树】51nod 1277 字符串中的最大值
- 51nod 1277 B - 字符串中的最大值 【KMP+dp】
- 51nod 1277 字符串中的最大值 (kmp之next数组的理解) O(n)可过
- BZOJ 3670: [Noi2014]动物园&&51nod 1277 字符串中的最大值
- 51Nod-1277-字符串中的最大值
- 51Nod-1277-字符串中的最大值
- 51nod 1277 1292字符串的最大值系列
- 51nod 1277 字符串中的最大值