Pagini recente » Cod sursa (job #1654077) | Cod sursa (job #2411375) | Cod sursa (job #704818) | Cod sursa (job #245083) | Cod sursa (job #587448)
Cod sursa(job #587448)
#include<stdio.h>
#include<string.h>
#define minim(a,b) (a<b ? a : b)
#define NMAX 606
#define INF 1000000006
int n,m,rez[NMAX][NMAX];
char ch[205];
int f[NMAX][4],sol[NMAX];
char s[NMAX];
int main ()
{
int i,j,t,ind,mod;
int gr,a,b,val,k;
freopen("perb.in","r",stdin);
freopen("perb.out","w",stdout);
scanf("%d%d\n",&n,&m);
scanf("%s",s+1);
ch['C']=1;
ch['G']=2;
ch['T']=3;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
rez[i][j]=INF;
for(i=1;i<=n;i++)
for(j=1;j<=(n-i+1)/2;j++)
{
if(j==1)
mod=0;
else
mod=1;
for(t=0;t<j;t++)
{
memset(f[t],0,sizeof(f[t]));
sol[t]=0;
}
for(t=i;t<=n;t++)
{
ind=ch[(int)s[t]];
f[mod][ind]++;
if(f[mod][ind]>sol[mod])
sol[mod]=f[mod][ind];
if(!mod && t!=i+j-1)
{
gr=(t-i+1)/j;
val=0;
for(k=0;k<j;k++)
val+=gr-sol[k];
rez[i][t]=minim(rez[i][t],val);
}
mod++;
if(mod==j)
mod=0;
}
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",rez[a][b]);
}
return 0;
}