Cod sursa(job #586175)

Utilizator maritimCristian Lambru maritim Data 30 aprilie 2011 13:59:02
Problema Perb Scor 60
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 5-9 Marime 1.07 kb
//Lambru Andrei Cristian - Algoritmiada 2011
//Runda Finala - clasele 5-9
#include<stdio.h>
#include<vector>

#define INF 1000000

short int A[610];
int B[5];
int N;
long int M;
char c;
int a;
int b;

int solve(int a,int b)
{
	int viz[5];
	int MIN = INF;
	int c;
	int nr;
	int nr1;
	for(int i=1;i<=(b-a+1)/2;i++)
	{
		if((b-a+1)%i == 0)
		{
			nr1 = 0;
			for(int k=0;k<i;k++)
			{
				memset(B,0,sizeof(B));
				nr = -INF;
				for(int j=a+k;j<=b;j+=i)
					B[A[j]] ++;
				for(int i=1;i<=4;i++)
					if(nr<B[i])
						nr = B[i];
				nr1 += (b-a+1)/i-nr;
			}
			if(MIN>nr1)
				MIN = nr1;
		}
	}
	return MIN;
}

int main()
{
	FILE *f = fopen("perb.in","r");
	FILE *g = fopen("perb.out","w");
	
	fscanf(f,"%d %d \n",&N,&M);
	for(int i=1;i<=N;i++)
	{
		fscanf(f,"%c",&c);
		if(c == 'A')
			A[i] = 1;
		else if(c == 'C')
			A[i] = 2;
		else if(c == 'G')
			A[i] = 3;
		else if(c == 'T')
			A[i] = 4;
	}
	for(int i=1;i<=M;i++)
	{
		fscanf(f,"%d %d",&a,&b);
		fprintf(g,"%d\n",solve(a,b));
	}
	
	fclose(g);
	fclose(f);
	return 0;
}