Pagini recente » Cod sursa (job #1774193) | Cod sursa (job #676775) | Cod sursa (job #2188451) | Cod sursa (job #1600929) | Cod sursa (job #1069006)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX = 610;
int N, M, MinChanges[NMAX][NMAX], X, Y, Freq[NMAX][4];
char S[NMAX];
int Max(int A, int B, int C, int D)
{
return max(max(A, B), max(C, D));
}
int main()
{
freopen("perb.in", "r", stdin);
freopen("perb.out", "w", stdout);
scanf("%i %i\n", &N, &M);
for(int i = 1; i <= N; ++ i)
for(int j = 1; j <= N; ++ j)
MinChanges[i][j] = 0x3f3f3f3f;
gets(S + 1);
for(int Period = 1; Period <= N; Period ++)
for(int Right = N; Right >= 1; Right --)
{
int NrSecv = 1, Now = 0;
for(int Left = Right; Left >= 1; Left --)
{
int R = (Right - Left + 1) % Period;
if(NrSecv == 1) Freq[R][0] = Freq[R][1] = Freq[R][2] = Freq[R][3] = 0;
if(S[Left] == 'A') Freq[R][0] ++;
else if(S[Left] == 'C') Freq[R][1] ++;
else if(S[Left] == 'G') Freq[R][2] ++;
else Freq[R][3] ++;
Now += NrSecv - Max(Freq[R][0], Freq[R][1], Freq[R][2], Freq[R][3]);
if(R == 0)
{
if(NrSecv > 1) MinChanges[Left][Right] = min(MinChanges[Left][Right], Now);
Now = 0;
NrSecv ++;
}
}
}
for(; M; M --)
{
scanf("%i %i", &X, &Y);
printf("%i\n", MinChanges[X][Y]);
}
}