Cod sursa(job #141126)

Utilizator razvi9Jurca Razvan razvi9 Data 22 februarie 2008 19:19:19
Problema Garaj Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,i,j;
pair<int,int> a[100001];
pair<int,long long> res;
inline bool isrez(int mij)
{
	int m1=0;
	for(i=n-1;i>=0 && m1<m;--i)
	{
		j=0;
		while(j+2*a[i].second<=mij && m1<m)
		{
			j+=2*a[i].second;
			m1+=a[i].first;
		}
	}
	if(m1<m) return false;
	res.first=mij;
	return true;
}

int b_search(int i,int j)
{
	if(i>j) return 0;
	int mij=(i+j)/2;
	if(isrez(mij)){
		b_search(i,mij-1);
		return 1;}
	else
		return b_search(mij+1,j);

}
void getoptim()
{
	int m1=0;
	for(i=n-1;i>=0 && m1<m;--i)
		m1+=a[i].first,res.second++;		
}
int main()
{
	ifstream f("garaj.in");
	ofstream g("garaj.out");
	f>>n>>m;
	for(i=0;i<n;++i)
		f>>a[i].first>>a[i].second;
	sort(&a[0],&a[n]);
	b_search(1,245000);
	for(i=0;i<n;i++)
		a[i].first*=res.first/(2*a[i].second);
	sort(&a[0],&a[n]);
	getoptim();
	g<<res.first<<" "<<res.second<<endl;
	g.close();
}