loj模拟赛t1

来源:互联网 发布:jdbc连接数据库步骤 编辑:程序博客网 时间:2024/05/29 08:27

//水题,二十分钟绝对应该搞定...而我搞了四十分钟,就是小模拟而已

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=5000010;
ll n,k,vis[2000010];
char s[maxn];
int main(){
 scanf("%s",s+1);
 //for(int i=1;i<=strlen(s+1);i++) cout<<s[i];
 //cout<<endl;
 scanf("%lld",&k);
 int len=strlen(s+1);
 long long now=0,ans=0,now1;
 for(int i=1;i<=len;i++){
  //cout<<i<<' '<<endl;
  int j=i+k-1;
  if(j>len) break;
  if(i==1){
   for(int k=1;k<=j;k++){
    if(s[k]=='A') now1=0;
    else if(s[k]=='G') now1=1;
    else if(s[k]=='C') now1=2;
    else if(s[k]=='T') now1=3;
    now=now*4+now1;
   }
   //cout<<"now: "<<now<<endl;
   vis[now]=1;
   ans=max(ans,vis[now]);
  }
  else{
   if(s[i-1]=='A') now1=0;
   if(s[i-1]=='G') now1=1;
   if(s[i-1]=='C') now1=2;
   if(s[i-1]=='T') now1=3;
   now-=now1*pow(4,k-1);
   if(s[j]=='A') now1=0;
   if(s[j]=='G') now1=1;
   if(s[j]=='C') now1=2;
   if(s[j]=='T') now1=3;
   now=now*4+now1;
   vis[now]++;
   ans=max(ans,vis[now]);
  }
  //cout<<i<<' '<<now<<endl;
 }
 cout<<ans<<endl;
 return 0;
}

原创粉丝点击