BZOJ3620: 似乎在梦中见过的样子
2015-12-16 12:40
323 查看
Description
“Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约.这是 Modoka 的一个噩梦,也同时是上个轮回中所发生的事.为了使这一次 Madoka 不再与 QB签订契约,Homura 决定在刚到学校的第一天就解决 QB.然而,QB 也是有许多替身的(但在第八话中的剧情显示它也有可能是无限重生的),不过,意志坚定的 Homura 是不会放弃的——她决定
消灭所有可能是 QB 的东西.现在,她已感受到附近的状态,并且把它转化为一个长度为 n 的字符串交给了学 OI 的你.
现在你从她的话中知道 , 所有形似于 A+B+A 的字串都是 QB 或它的替身 , 且len(A)>=k,len(B)>=1 (位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然后你必须尽快告诉 Homura 这个答案——QB 以及它的替身的数量.
Input
第一行一个字符串,第二行一个数 kOutput
仅一行一个数 ans,表示 QB 以及它的替身的数量Sample Input
【样例输入 1】aaaaa
1
【样例输入 2】
abcabcabc
2
Sample Output
【样例输出 1】6
【样例输出 2】
8
HINT
对于 100%的数据:n<=15000 , k<=100,且字符集为所有小写字母开始想的是枚举两个位置算LCP,将可行的右端点区间打上标记,时间O(n^2)。
可惜常数太大。。。。
#include<cstdio> #include<cctype> #include<queue> #include<cmath> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i;i=next[i]) using namespace std; const int BufferSize=1<<16; char buffer[BufferSize],*head,*tail; inline char Getchar() { if(head==tail) { int l=fread(buffer,1,BufferSize,stdin); tail=(head=buffer)+l; } return *head++; } inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } const int maxn=15010; char s[maxn]; int n,k,ans,f[maxn],g[maxn]; int main() { scanf("%s",s+1);n=strlen(s+1);k=read(); rep(i,1,n) { f[1]=0;g[0]=1e9;int j=0; rep(p,2,n-i+1) { while(j&&s[i+j]!=s[i+p-1]) j=f[j]; if(s[i+j]==s[i+p-1]) j++;f[p]=j; if(j<k) g[j]=1e9; else g[j]=min(j,g[f[j]]); if((g[j]<<1)<p) ans++; } } printf("%d\n",ans); return 0; }
View Code
相关文章推荐
- 超过100本的linux免费书籍
- 20本最好的Linux免费书籍
- 大规模的前端组件化与模块化
- 使用四种框架分别实现百万websocket常连接的服务器--转
- 网站开发人员应该知道的61件事
- 如何写出无法维护的代码
- google提供的Geocoding服务
- block为什么使用copy修饰
- HTML5数据存储方案data-*与jQuery数据存储方案$.data()的区别
- 191. Number of 1 Bits (Int; Bit)
- Hibernate关联关系映射之一对一(主键关联)
- Spring下载地址
- 贪心算法应用之一:装箱问题
- 职称中的“副高”与“正高”
- FZU Problem 1686 神龙的难题 重复覆盖
- Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)
- OC-050.常用的结构体
- 使用 hadoop组件 作为 ETL 或 ELT 工具
- wubi安装ubuntu的正确方法
- leetcode -- Basic Calculator I &II --重点,未完全理解