Pagini recente » Cod sursa (job #2381999) | Cod sursa (job #1868821) | Cod sursa (job #1622354) | Cod sursa (job #12451) | Cod sursa (job #636138)
Cod sursa(job #636138)
#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;
}