Cod sursa(job #982726)

Utilizator dariusdariusMarian Darius dariusdarius Data 9 august 2013 19:45:24
Problema Garaj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct CAMION
{
    int t,c;
    inline bool operator<(const CAMION &other) const
    {
        return c>other.c;
    }
} a[100005];
int n,nr;
int C[100005];
bool ok(int timp)
{
    long long sol=0;
    for(int i=1;i<=n;i++)
    {
        sol+=(timp/(2*a[i].t))*a[i].c;
        if(sol>=nr) return true;
    }
    return false;
}
int main()
{
    freopen("garaj.in","r",stdin);
    freopen("garaj.out","w",stdout);
    scanf("%lld%lld",&n,&nr);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].c,&a[i].t);
    int ans=2000000000;
    for(int pas=1<<30;pas;pas>>=1)
        if(ans-pas>=0 && ok(ans-pas))
            ans-=pas;
    for(int i=1;i<=n;i++)
        C[i]=(ans/(2LL*a[i].t))*a[i].c;
    sort(C+1,C+n+1,greater<int>());
    int i,sol=0;
    for(i=1;sol<nr;i++)
        sol+=C[i];
    printf("%d %d\n",ans,i-1);
    return 0;
}