Pagini recente » Cod sursa (job #3160058) | Cod sursa (job #1217354) | Cod sursa (job #350799) | Cod sursa (job #2631311) | Cod sursa (job #2249473)
#include <iostream>
#include<cstdio>
#include<string.h>
#include<limits.h>
#include<map>
using namespace std;
const int N=605;
int rezolvat[N][N];
int frcv[N][4];
int v[N];
char s[N];
map <char,int> cod;
int rezolva(int st,int dr){
int per,i,j,cars,nrcar,rasp=INT_MAX,carmax;
for(per=1;per<=dr-st;per++){
if((dr-st+1)%per==0){
//memset(frcv,0,sizeof(frcv));
for(i=st;i<=dr;i++){
frcv[(i-st)%per][v[i]]++;
}
cars=0;
for(i=0;i<per;i++){
carmax=INT_MIN;
nrcar=0;
for(j=0;j<4;j++){
nrcar+=frcv[i][j];
carmax=max(carmax,frcv[i][j]);
frcv[i][j]=0;
}
cars+=(nrcar-carmax);
}
rasp=min(rasp,cars);
}
}
return rasp;
}
int main()
{
FILE*fin,*fout;
fin=fopen("perb.in","r");
fout=fopen("perb.out","w");
int n,m,i,st,dr;
fscanf(fin,"%d%d ",&n,&m);
fgets(s+1,N,fin);
cod['A']=0;
cod['C']=1;
cod['G']=2;
cod['T']=3;
for(i=1;i<=n;i++){
v[i]=cod[s[i]];
}
memset(rezolvat,-1,sizeof(rezolvat));
for(i=1;i<=m;i++){
fscanf(fin,"%d%d",&st,&dr);
if(rezolvat[st][dr]==-1){
rezolvat[st][dr]=rezolva(st,dr);
}
fprintf(fout,"%d\n",rezolvat[st][dr]);
}
return 0;
}