Cod sursa(job #557920)

Utilizator nautilusCohal Alexandru nautilus Data 16 martie 2011 22:59:00
Problema Garaj Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
#define dmax 100010
#define inf 1000010
using namespace std;

int n,m;
int t[dmax],c[dmax];
int mint,nr;
int s[dmax];


void citire()
{
 int i;
	
 ifstream fin("garaj.in");
 
 fin>>n>>m;
 for (i=1; i<=n; i++)
	 fin>>c[i]>>t[i];
 
 fin.close();
}


int verif(int timp)
{
 int i,s=0;
	
 for (i=1; i<=n; i++)
	 {
	  s += timp / (2 * t[i]) * c[i];
	  if (s >= m)
		   return 1;
	 }
 
 return 0;
}


void caut(int st, int dr)
{
 int mijl = (st + dr) / 2;
 
 if (st <= dr)
	 if (verif(mijl) == 1)
		 {
		  mint = mijl;
		  caut(st, mijl-1);
		 } else
		 caut(mijl+1, dr);
}


void solve()
{
 int i,sum=0;
	
 for (i=1; i<=n; i++)
	 s[i] = mint / (2 * t[i]) * c[i];
 
 sort(s+1, s+n+1);
 
 for (i=n; i>=1; i--)
	 {
	  sum += s[i]; nr++;
	  if (sum >= m)
		  break;
	 }
}


void afisare()
{
 ofstream fout("garaj.out");
 
 fout<<mint<<" "<<nr<<'\n';
	
 fout.close();
}


int main()
{
	
 citire();
 caut(1,inf);
 solve();
 afisare();
	
 return 0;
}