Cod sursa(job #1549591)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 decembrie 2015 15:06:00
Problema Aprindere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#define MAXN 1000
int v[MAXN],mat[MAXN][MAXN],c[MAXN],tc[MAXN],nrc[MAXN];
int main(){
    FILE*fi,*fout;
    int i,j,con,n,m,lin,flag,max,t;
    fi=fopen("aprindere.in" ,"r");
    fout=fopen("aprindere.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&m);
    flag=0;
    for(i=0;i<n;i++){
        fscanf(fi,"%d" ,&v[i]);
        flag+=v[i];
     }
     for(i=0;i<m;i++){
          fscanf(fi,"%d%d%d" ,&c[i],&tc[i],&nrc[i]);
          for(j=0;j<nrc[i];j++)
              fscanf(fi,"%d" ,&mat[i][j]);
     }
    t=0;
    while(flag<n){
        max=0;
        for(i=0;i<m;i++){
             con=flag;
             for(j=0;j<nrc[i];j++){
                   if(v[mat[i][j]]==1)
                       con--;
                   else
                       con++;
             }
             if(max<con){
                  max=con;
                  lin=i;
             }
        }
        for(j=0;j<nrc[lin];j++){
            if(v[mat[lin][j]]==1)
                flag--;
            else
                flag++;
            v[mat[lin][j]]=(v[mat[lin][j]]+1)%2;
        }
        t+=tc[lin];
    }
    fprintf(fout,"%d" ,t);
    fclose(fi);
    fclose(fout);
    return 0;
}