Pagini recente » Istoria paginii runda/preoji2020 | Cod sursa (job #111306) | Cod sursa (job #2221753) | Istoria paginii runda/summer_camp_4/clasament | Cod sursa (job #141091)
Cod sursa(job #141091)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,i,j;
pair<int,int> a[100001];
pair<int,int> res;
bool isrez(int mij)
{
int nr=0,m1=0;
for(i=0;i<n && 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;
b_search(1,1000);
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();
}