Cod sursa(job #585668)

Utilizator bog29Antohi Bogdan bog29 Data 30 aprilie 2011 10:53:38
Problema Fabrica Scor 10
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 1.5 kb
#include<fstream>
#include<algorithm>
#define dmax 100003
using namespace std;
ifstream in("fabrica.in");
ofstream out("fabrica.out");

int n,m,k,c1[dmax],c2[dmax],nrd,ok;
long long t[dmax],x[dmax/2],cp[dmax],mn,mx;

int main()
{	
	int i;
	
	in>>n>>m>>k;
	
	for(i=1; i<=m; i++)
		in>>c1[i];
		
	for(i=1; i<=k; i++)
		in>>c2[i];

	in.close();
	
	sort( c1+1, c1+m+1);
	sort( c2+1, c2+k+1);
	
	nrd = 0;
	
	
	
	while(nrd < n)
	{	
		mn = 100000;
		
		for(i=1; i<=m; i++)	
		{	
			cp[i] = x[i]+c1[i];	
			
			if(cp[i] < mn)
				mn = cp[i];
		}	
		
		for(i=1; i<=m; i++)
		{	if(cp[i] == mn && nrd+1 <= n)
			{	x[i] = cp[i];
				nrd++;
				t[nrd] = x[i];
			}	
			cp[i] = 0;
		}	
	}

	/*for(i=1; i<=n; i++)
		out<<t[i]<<" ";
	out<<'\n';*/
	
	mx = 0;
	for(i=1; i<=n; i++)
		if(t[i] > mx)
			mx = t[i];
	out<<mx<<" ";	
	
	for(i=1; i<=k; i++)
		x[i]=0;
	
	nrd = 0;
	
	while(nrd < n)
	{	
		mn = 100000;
		
		for(i=1; i<=k; i++)	
		{	
			if(x[i] < t[nrd+1])
				cp[i] = t[nrd+1]+c2[i];
			else cp[i] = x[i]+c2[i];

			if(cp[i] < mn)
				mn = cp[i];			
		}	
		
		ok = 1;
		for(i=1; i<=k; i++)
		{	
			if(cp[i] == mn && nrd+1 <= n && ok)
			{	x[i] = cp[i];
				nrd++;
				t[nrd] = x[i];
				ok = 0;
			}	
			cp[i] = 0;
		}	
		
		/*for(i=1; i<=k; i++)	
			out<<x[i]<<" ";
		out<<'\n';*/
	}	
	
	mx = 0;
	for(i=1; i<=n; i++)
		if(t[i] > mx)
			mx = t[i];
	out<<mx<<" ";	
	
	//for(i=1; i<=n; i++)
		//out<<t[i]<<" ";
	
	out.close();
	return 0;
}