Cod sursa(job #636138)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 19 noiembrie 2011 17:20:16
Problema Ferma2 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 2.08 kb
#include <stdio.h>

int main(){
  int n,k;
  int castig=0;
  FILE *fin=fopen("ferma2.in","r");
  FILE *fout=fopen("ferma2.out","w");
  fscanf(fin,"%d%d",&n,&k);
  int x=k/3;
  int i,j;
  //inca din citire adun primele  k straturi
  int a,max1=0,max2=0,max3=0;//aflu si maximurile pe laturile ramase
  int i12,i13,i23;
  for(i=0;i<n;i++){//sunt pe linia i
    for(j=0;j<=i;j++){
       //sunt pe coloana j
       fscanf(fin,"%d",&a);
       //verific stratul
       if((j<x || j>(i-x))||i>=(n-x)){
            castig+=a; 
            //printf("FOAIE %d\n",a);
       }else{
          //daca sunt din straturile celelalte
          //acum sunt pe linia i, coloana j
          if(j==x){
             //sunt pe latura 1 a triunghiului ramas interior
             //printf("elementul %d este pe latura 1 a triunghiului interior\n",a);
             max1+=a;//daca e si in 2
             if(i==(n-x-1))i12=a;
             if(j==(i-x))i13=a;
          }
          if(i==(n-x-1)){//pe latura 2
             //printf("elementul %d este pe latura 2 a triunghiului interior\n",a);
             max2+=a;
            if(j==(i-x))i23=a;
          }
          if(j==(i-x)){//latura 3
            //printf("elementul %d este pe latura 3 a triunghiului interior\n",a);
            max3+=a;
          }
       }
    }
  }
 //printf("%d %d %d\n",max1,max2,max3);
  int aux;
  switch(k%3){
    case 0: fprintf(fout,"%d\n",castig); break;
    case 1:
        //castigul de pana acum + maximul dintre max1,max2,max3
        aux=-1;
        if(max1>aux)aux=max1;
        if(max2>aux)aux=max2;
        if(max3>aux)aux=max3;
        castig+=aux;
        fprintf(fout,"%d\n",castig); break;
   case 2:
         //castigul de pana acum + primele doua maxime
         aux=max1;//aux va tine minimul dintre ele
         if(max2<aux)aux=max2;
         if(max3<aux)aux=max3;
          if(aux==max1){//am ales 2 si 3
            castig+=max1+max2+max3-aux-i23;
          }else  if(aux==max2){//am ales 1 si 3
            castig+=max1+max2+max3-aux-i13;
          }else  castig+=max1+max2+max3-aux-i12;



         fprintf(fout,"%d\n",castig); break;
 
}
return 0;
}