Pagini recente » Cod sursa (job #2201453) | Cod sursa (job #639519) | Cod sursa (job #2815972) | Cod sursa (job #1278849) | Cod sursa (job #1500432)
#include <bits/stdc++.h>
#define Nmax 605
#define INF 2000000000
using namespace std;
int sol[Nmax][Nmax],fr[Nmax][4],mx[Nmax],n;
char a[Nmax];
inline int cod(char x)
{
if(x=='A') return 0;
if(x=='C') return 1;
if(x=='G') return 2;
if(x=='T') return 3;
}
int main()
{
int x,y,i,j,jj,d,k,Q,sum;
ifstream cin("perb.in");
ofstream cout("perb.out");
cin>>n>>Q>>(a+1);
for(i=1;i<=n;++i)
for(j=i;j<=n;++j) sol[i][j]=INF;
for(i=1;i<=n;++i)
{
for(d=1;d<=(n-i+1)/2;++d)
{
for(j=1;j<=d;++j) fr[j][0]=fr[j][1]=fr[j][2]=fr[j][3]=0;
for(j=i+d-1;j<=n;j+=d)
{
for(k=j;k>=j-d+1;--k) ++fr[k-(j-d+1)+1][cod(a[k])];
if(j>i+d-1)
{
sum=0;
for(k=1;k<=d;++k)
{
for(jj=mx[k]=0;jj<4;++jj) mx[k]=max(mx[k],fr[k][jj]);
sum+=mx[k];
}
sol[i][j]=min(sol[i][j],j-i+1-sum);
}
}
}
}
while(Q--)
{
cin>>x>>y; cout<<sol[x][y]<<"\n";
}
return 0;
}