Pagini recente » Cod sursa (job #1359372) | Cod sursa (job #331465) | Cod sursa (job #768153) | Cod sursa (job #1226944) | Cod sursa (job #336918)
Cod sursa(job #336918)
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <algorithm>
#include <utility>
#include <string>
#include <functional>
#include <sstream>
#include <fstream>
using namespace std;
#define FOR(i,a,b) for (i=(a);i<=(b);i++)
#define fori(it,v) for (it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) c.begin(),c.end()
#define pf push_front
#define popb pop_back
#define popf pop_front
typedef pair<int ,int> ii;
FILE *in,*out;
int m,camioane,c[100005],t[100005],n;
vector<long long >b;
bool ver(long long rez,bool fmm)
{
long long sum=0,i;
b.clear();
b.reserve(n);
FOR(i,1,n)
b.pb(c[i]*(rez/t[i]));
if (fmm)
{
sort(all(b));
reverse(all(b));
}
camioane=0;
FOR(i,0,n-1)
{
camioane++;
sum+=b[i];
if (sum>=m)
break;
}
if (sum>=m)
return true;
return false;
}
int main()
{
long long i,rez;
in=fopen("garaj.in","r");
out=fopen("garaj.out","w");
fscanf(in,"%d%d",&n,&m);
FOR(i,1,n)
{
fscanf(in,"%d%d",&c[i],&t[i]);
t[i]*=2;
}
rez=0;
for(i=1<<18;i;i>>=1)
{
rez+=i;
if (ver(rez,0))
rez-=i;
}
rez++;
ver(rez,1);
fprintf(out,"%lld %d\n",rez,camioane);
fclose(in);
fclose(out);
return 0;
}