Cod sursa(job #586008)

Utilizator PatrikStepan Patrik Patrik Data 30 aprilie 2011 13:11:36
Problema Avioane Scor 0
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 5-9 Marime 1.01 kb
	#include<stdio.h>
	#include<algorithm>
	using namespace std;
	#define MAX 100001
	FILE *f , *g ;
	long n , v[MAX] , k;
	long long best1 , best2 , r1 , r2  ,  t;
	
	void citire();
	void sortare();
	void solve();
	void tipar();
	
	int main()
	{
		citire();
		sortare();
		solve();
		tipar();
		return 0;
	}
	
	void citire()
	{
		f=fopen("avioane.in" , "r" );
		fscanf(f , "%ld" , &n );
		for ( long i = 1 ; i<= n ; ++i )
			fscanf(f , "%ld" , &v[i] );
		fclose(f);
	}
	
	void sortare()
	{
		sort(v+1 , v+n+1 );
	}
	
	void solve()
	{
		long i = 1;
		while( i <= n)
		{
			k = i ;
			while(v[k] == v[k+1])
				k++;
			t = v[i] * (k-i+1);
			if(best2 + r2*(k-i+1) + best1 >= t + best2 ||( k >i && t <= best2 + r2))
				best2+=r2*(k-i+1);
			else
			{
				best1 = best2;
				r1 = r2;
				best2 = t;
				r2 = v[i];
			}
			if(k > i)
				i = k+1;
			else
				++i;
		}
	}
	
	void tipar()
	{
		g=fopen("avioane.out" , "w" );
		fprintf(g , "%lld" , best1+best2 );
		fclose(g);
	}