1.序列

【问题描述】 Hzy 得到了一个字符串,这个字符串只有’A’,’G’,’C’,’T’这四种字符,她发现这个 序列中连续 k 个字符可以形成一种新的字符序列,她称这种序列为 Hzy 序列,她现在想知 道在所有的 Hzy 序列中,出现最多的一种的出现次数。

【输入格式】 输入文件名为 uaena.in。 输入文件的第一行为一个字符串,保证合法。 输入文件的第二行为一个正整数 k。

【输出格式】 输出文件名为 uaena.out。 输出文件只有一个数,即所求答案。

【输入输出样例 1】

input

AAAAA

1

output

5

【样例解释 1】 对于这段字符串中,连续的 k 个字符组成的 Hzy 序列只有 A,共出现 5 次,所以答案 为 5。

【输入输出样例 2】

ueana.in

ACTCACTC

4

ueana.out

2

【样例解释 1】 对于这段字符串中,连续的 k 个字符组成的 Hzy 序列有 ACTC,CTCA,TCAC,CACT 其中 ACTC 共出现 2 次,其余只出现了 1 次, 所以答案为 2。

【数据规模与规定】

n<=5 × 10^6  k<=10

sol: 哈希一下,O(n)水过

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
const ll Base=,Mod=;
int n,m,a[N];
char S[N];
inline int Check(char ch)
{
if(ch=='A') return ;
if(ch=='T') return ;
if(ch=='C') return ;
if(ch=='G') return ;
}
ll Seed[N];
inline void Pre(int n)
{
int i;
Seed[]=1ll; for(i=;i<=n;i++) Seed[i]=(ll)(Seed[i-]*%Mod);
}
struct Hash
{
ll Hash[N];
inline void Make(int n,int *a)
{
int i; Hash[]=; for(i=;i<=n;i++) Hash[i]=(Hash[i-]*%Mod+a[i])%Mod;
}
inline ll Ask(int l,int r)
{
return (ll)(Hash[r]+Mod-Hash[l-]*Seed[r-l+]%Mod)%Mod;
}
inline ll Get(int l,int r)
{
return Ask(l,r)*Seed[n-r]%Mod;
}
}Ha;
int Sum[];
int main()
{
freopen("ueana.in","r",stdin);
freopen("ueana.out","w",stdout);
int i,ans=;
scanf("%s",S+); n=strlen(S+); R(m);
for(i=;i<=n;i++) a[i]=Check(S[i]);
Pre(n); Ha.Make(n,a);
for(i=m;i<=n;i++)
{
// cout<<i-m+1<<' '<<i<<' '<<Ha.Ask(i-m+1,i)<<' '<<Ha.Get(i-m+1,i)<<endl;
Sum[Ha.Ask(i-m+,i)]++;
}
for(i=;i<=Seed[m];i++) ans=max(ans,Sum[i]);
Wl(ans);
return ;
}
/*
input
AAAAA
1
output
5 input
ACTCACTC
4
output
2
*/

最新文章

  1. yum阿里云镜像源
  2. 屠龙之路_假期罢工和公主私奔_SixthDay
  3. ecnu1624求交集多边形面积
  4. iOSpush过后返回多级界面
  5. 《编写高质量代码-Web前端开发修改之道》笔记--第三章 高质量的HTML
  6. JQuery 判断某个属性是否存在 hasAttr
  7. JSON.parse: expected property name or &#39;}&#39;
  8. JSTL解析——001
  9. Git-多人协作
  10. yum fastermirror插件屏蔽一些国内源
  11. (二)部署solr7.1.0到tomcat
  12. .net core 注入机制与Autofac
  13. uCosII中的任务
  14. MYSQL实战
  15. 栈ADT
  16. 《深入理解Java虚拟机》(五)JVM调优 - 工具
  17. vivado实现模16的计数器
  18. 让UI设计师崩溃的瞬间,你经历过哪些?
  19. How To Crop Bitmap For UWP
  20. 【转】IT业给世界带来的危机

热门文章

  1. shell习题第15题:看数字找规律
  2. 怎样理解undefined和 null
  3. 正则表达式(Regular Expression)分组(Group)
  4. JS基础_函数的简介
  5. javaIO——PipedReader 和 PipedWriter 实现模拟即时聊天
  6. eclipse export runnable jar(导出可执行jar包)
  7. 文件的空间使用和IO统计
  8. debian设置limits.conf
  9. sql循环-游标、临时表、表变量
  10. appium-清空输入框的内容后,再次输入内容会回退最后两个字符串