2803: [Poi2012]Prefixuffix

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 219  Solved: 95
[Submit][Status][Discuss]

Description

对于两个串S1、S2,如果能够将S1的一个后缀移动到开头后变成S2,就称S1和S2循环相同。例如串ababba和串abbaab是循环相同的。
给出一个长度为n的串S,求满足下面条件的最大的L:
1. L<=n/2
2. S的L前缀和S的L后缀是循环相同的。

Input

第一行一个正整数n (n<=1,000,000)。第二行n个小写英文字母,表示串S。

Output

一个整数,表示最大的L。

Sample Input

15
ababbabababbaab

Sample Output

6

HINT

 

Source

[Submit][Status][Discuss]

这题好厉害啊!!!

设$f[i]=[i+1,n-i]$这个子串中前缀和后缀最长的一样的。

这样答案就=$\max{f[i]+i},其中[1,i]=[n-i+1,n]$

发现一个性质$f[i-1]<=f[i]+2$,这样就可以类似一个单调栈来$O(n)$处理了。

(PS:POI卡hash,太差了!!)

 #include<cstdio>
#include<algorithm>
#define N 1000010
#define ll long long
int pow[N][],hash[N][],mod[]={,},n,ans;
char s[N];
inline int gethash(int x,int l,int r)
{return (hash[r][x]-(ll)hash[l-][x]*pow[r-l+][x]%mod[x]+mod[x])%mod[x];}
inline bool check(int l,int r,int x)
{
return gethash(,l,l+x-)==gethash(,r-x+,r)&&gethash(,l,l+x-)==gethash(,r-x+,r);
}
int main()
{
scanf("%d\n",&n);
pow[][]=pow[][]=;
for(int i=;i<=n;i++)
{
s[i]=getchar();
for(int x=;x<=;x++)
hash[i][x]=((ll)hash[i-][x]*+s[i])%mod[x],
pow[i][x]=(ll)pow[i-][x]*%mod[x];
}
for(int i=n/,j=;i;i--,j=std::min(j+,n/-i))
if(check(,n,i))
for(;~j;j--)
if(check(i+,n-i,j))
{
ans=std::max(ans,i+j);
break;
}
printf("%d",ans);
}

最新文章

  1. Chrome Developer Tools:Timeline Panel说明
  2. spark的standlone模式安装和application 提交
  3. ArcMap中地图输出(Options)选项显示不完整
  4. Windows 上远程访问 Unix 的 XWindow / XManager / X
  5. UIAlertController——之Block回调
  6. 面试题总结之Linux/Shell
  7. Spring 数据源配置二:多数据源
  8. Java 练习(多态,instanceof)
  9. Python isinstance
  10. wxPython中按钮、文本控件的简单运用
  11. maven入门(1-1)maven是什么?
  12. 关于在eclipse开发环境上打开手机data文件
  13. Linux - sed 工具
  14. Appium的入门使用
  15. mysql数据的基本操作
  16. 在Linux环境下使用Apache部署ASP.NET Core
  17. git提交待审核代码,报错没有change-id的解决方法
  18. Kafka0.8.2删除topic逻辑(转)
  19. Eclipse git 冲突合并
  20. python自动化之爬虫模拟登录

热门文章

  1. Overview and Evaluation of Bluetooth Low Energy: An Emerging Low-Power Wireless Technology
  2. OCJP(1Z0-851) 模拟题分析(七)--&gt;214
  3. [LeetCode] TwoSum
  4. 攻城狮在路上(壹) Hibernate(六)--- 通过Hibernate操纵对象(上)
  5. Spring容器初始化过程
  6. VS2010和matlab2010混合编程中char16_t重定义的问题
  7. ViewPager的广告条轮播
  8. hdu 1024 Max Sum Plus Plus
  9. matlab坐标外围背景变白色
  10. CSS 样式使用