Cod sursa(job #2249473)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 29 septembrie 2018 22:12:48
Problema Perb Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#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;
}