Solution. LG3426 [POI2005]SZA-Template
Description 展开目录
用一个印章印出字符串
Solution 展开目录
若印章能印出
设
考虑什么时候能够通过
已知,
具体实现时我们维护每个 dp 值对应的最大下标即可。
Code 展开目录
- namespace Main{
- const int N = 500005;
- int n, nxt[N], f[N], cnt[N];
- char s[N];
- void Main(){
- scanf("%s", s + 1);
- n = strlen(s + 1);
- for(int i = 2, j = 0; i <= n; i++){
- while(j && s[i] != s[j+1]) j = nxt[j];
- if(s[i] == s[j+1]) j++;
- nxt[i] = j;
- }
- for(int i = 1; i <= n; i++){
- f[i] = i;
- if(cnt[f[nxt[i]]] >= i - nxt[i]) f[i] = f[nxt[i]];
- cnt[f[i]] = i;
- }
- write(f[n]);
- return;
- }
- }
本作品采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。