Cod sursa(job #585598)

Utilizator johnny2008Diaconu Ion johnny2008 Data 30 aprilie 2011 09:58:25
Problema Fabrica Scor 40
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 0.92 kb
#include<fstream>
using namespace std;
long T[2][50001];
int M[2],N;
long TA,TB;
long proc_time(int o){
	long t=0,p;
	int i;
	do{
		p=0;
		t++;
		for(i=0;i<M[o];i++) p+=t/T[o][i];
	}while(p<N);
	return t;
}
long nrjobs(long o,long t){
	long n,p;
	int i;
	for(i=0,n=0;i<M[o];i++) n+=(t%T[o][i]==0);
	for(i=0,p=0;i<M[o];i++) p+=(t-1)/T[o][i];
	if(n>N-p) n=N-p;
	if(n<0) n=0;
	return n;
}
void citeste(){
	ifstream f("fabrica.in");
	int i;
	f>>N;
	f>>M[0]>>M[1];
	for(i=0;i<M[0];i++){
		f>>T[0][i];
	}
	for(i=0;i<M[1];i++){
		f>>T[1][i];
	}
	f.close();
}
void solve(){
	long t,d,x,v,p,i;
	TA=proc_time(0);
	TB=proc_time(1);
	for(d=1,t=0,x=0;d+t<TA;t++){
		x+=nrjobs(0,d+t);
		v=nrjobs(1,TB-t);
		for(;x<v;d++,x+=nrjobs(0,d+t));
		x-=v;
	}
	TB+=d;
}
void afiseaza(){
	ofstream g("fabrica.out");
	g<<TA<<" "<<TB;
	g.close();
}
int main(){
	citeste();
	solve();
	afiseaza();
	return 0;
}