Cod sursa(job #434897)

Utilizator elena.cavalCaval Elena elena.caval Data 6 aprilie 2010 18:10:54
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 3.72 kb
#include<stdio.h>
#include<stdlib.h>

int main()
{
	FILE *fin = fopen("gutui.in","r");
	FILE *fout = fopen("gutui.out","w");
	int nr_gutui,inaltime_maxima,inaltime_crengi;
	int i,ok,aux,tmp,j,greutate_maxima=0,inceput,t;
	int inaltime_gutuie[255],greutate_gutuie[255];
	fscanf(fin,"%d",&nr_gutui);
	fscanf(fin,"%d",&inaltime_maxima);
	fscanf(fin,"%d",&inaltime_crengi);
	for(i=0;i<nr_gutui;i++)
	{
		fscanf(fin,"%d",&inaltime_gutuie[i]);
		fscanf(fin,"%d",&greutate_gutuie[i]);
	}
	printf("%d %d %d\n",nr_gutui,inaltime_maxima,inaltime_crengi);
	//afisare inainte de sortare
	for(i=0;i<nr_gutui;i++)
		printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);
	printf("\n");

	//facem o sortare descrescatoare dupa inaltimea gutuielor
	do{
		ok=0;
		for(i=0;i<nr_gutui-1;i++)
		{
			if (inaltime_gutuie[i]<inaltime_gutuie[i+1])
			{
				aux = inaltime_gutuie[i]; tmp = greutate_gutuie[i];
				inaltime_gutuie[i] = inaltime_gutuie[i+1]; greutate_gutuie[i] = greutate_gutuie[i+1];
				inaltime_gutuie[i+1] = aux; greutate_gutuie[i+1] = tmp;
				ok=1;
			}

		}
	}while(ok);
	//afisare dupa sortare
	for(i=0;i<nr_gutui;i++)
		printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);

	i=1;
	while(i<nr_gutui)
	{
		if (inaltime_gutuie[i]/10 == inaltime_gutuie[i-1]/10)
		{
			inceput=i-1;
			while(inaltime_gutuie[i]/10 == inaltime_gutuie[i-1]/10 && i<nr_gutui)
				i++;

		//acum facem sortarea dupa greutate
			do{
				ok=0;
				for(j=inceput;j<=i-2;j++)
				{
					if (greutate_gutuie[j]<greutate_gutuie[j+1])
					{
						aux = greutate_gutuie[j]; tmp = inaltime_gutuie[j];
						greutate_gutuie[j] = greutate_gutuie[j+1]; inaltime_gutuie[j] = inaltime_gutuie[j+1];
						greutate_gutuie[j+1] = aux; inaltime_gutuie[j+1] = tmp;
						ok=1;
					}
				}
			 }while(ok);
		}
		else{
			i++;}

	}


	//afisare dupa sortarea - greutate
	printf("\n");
	for(i=0;i<nr_gutui;i++)
		printf("%d \n",greutate_gutuie[i]);

	printf("\n");
	for(i=0;i<nr_gutui;i++)
		printf("%d %d \n",inaltime_gutuie[i],greutate_gutuie[i]);

	for(i=0;i<nr_gutui;i++)
	{
		if (inaltime_gutuie[i] < inaltime_maxima)
		{
			greutate_maxima+=greutate_gutuie[i];
			printf("\n");
			for(j=i+1;j<nr_gutui;j++)
			{
				inaltime_gutuie[j]+=inaltime_crengi;
			}

		}
//		printf("%d ",greutate_maxima);
		if (inaltime_gutuie[i] == inaltime_maxima)
		{
			for(j=i+1;j<nr_gutui;j++)
			{
				if (inaltime_gutuie[j]==inaltime_maxima && inaltime_gutuie[j+1]+inaltime_crengi==inaltime_maxima && greutate_gutuie[j]>greutate_gutuie[j+1])
				{
					if(greutate_gutuie[j] > greutate_gutuie[i])
					{
						greutate_maxima+=greutate_gutuie[j];
                        printf("%d ",greutate_maxima);
						for(t=j;t<nr_gutui;t++)
						{
							inaltime_gutuie[t]+=inaltime_crengi;
						}
						break;
					}
					else{
						greutate_maxima+=greutate_gutuie[i];
                        printf("%d ",greutate_maxima);
						for(t=j;t<nr_gutui;t++)
						{
							inaltime_gutuie[t]+=inaltime_crengi;
						}
						break;
						}
				//break;
				}
				if(inaltime_gutuie[j] >=inaltime_maxima-inaltime_crengi && inaltime_gutuie[j]<inaltime_maxima)
				{
					if(greutate_gutuie[j]>greutate_gutuie[i])
					{
						greutate_maxima+=greutate_gutuie[j];
						printf("%d ",greutate_maxima);
						for(t=j;t<nr_gutui;t++)
						{
							inaltime_gutuie[t]+=inaltime_crengi;
						}
					break;
					}
					else{
						greutate_maxima+=greutate_gutuie[i];
						printf("%d ",greutate_maxima);
						for(t=j;t<nr_gutui;t++)
						{
							inaltime_gutuie[t]+=inaltime_crengi;
						}
						break;
					}
				//break;
				}
			}
		}

	}
	/*if (inaltime_gutuie[nr_gutui-1] == inaltime_maxima)
		greutate_maxima+=greutate_gutuie[nr_gutui-1];*/

	printf("%d\n",greutate_maxima);
	fprintf(fout,"%d",greutate_maxima);
	fclose(fout);
	fclose(fin);
	return 0;
}