Pagini recente » Cod sursa (job #2316381) | Cod sursa (job #1356158) | Cod sursa (job #2691746) | Cod sursa (job #2406124) | Cod sursa (job #1503225)
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("perb.in");
ofstream out("perb.out");
const int NMAX = 600;
const int SIGMA = 300;
int r[4][NMAX+2];
int v[NMAX+2];
int d[600+2][600+2];
int N, Q;
int main()
{
in >> N >> Q; in.get();
for( int i = 1; i <= N; ++i ) {
char c;
in.get( c );
int nr;
if( c == 'A' ) nr = 0;
else if( c == 'C' ) nr = 1;
else if( c == 'G' ) nr = 2;
else if( c == 'T' ) nr = 3;
v[i] = nr;
}
for( int dd = 1; dd < N; ++dd ) {
for( int st = 1; st <= N; ++st ) {
memset( r, 0, sizeof(r) );
for( int fn = st, pas = 1; fn <= N; ++fn, ++pas ) {
r[0][ fn % dd ] += ( v[fn] == 0 );
r[1][ fn % dd ] += ( v[fn] == 1 );
r[2][ fn % dd ] += ( v[fn] == 2 );
r[3][ fn % dd ] += ( v[fn] == 3 );
int LEST = st, LEFN = fn;
if( pas % dd == 0 && dd != pas ) {
int Ans = 0;
for( int p = 0; p < dd; ++p ) {
int mx = max( max(r[0][p] , r[1][p]) , max(r[2][p] , r[3][p]) );
Ans += ( r[0][p] + r[1][p] + r[2][p] + r[3][p] - mx );
}
d[LEST][LEFN] = Ans;
}
}
}
}
for( int i = 1; i <= Q; ++i ) {
int x, y;
in >> x >> y;
if( x > y ) swap(x, y);
out << d[x][y] << '\n';
}
return 0;
}