Cod sursa(job #239799)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 5 ianuarie 2009 21:37:35
Problema Energii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<algorithm>
using namespace std;
int g,w,a[1001],b[1001];
int divide(int p,int q){
    int st=p,dr=q,x=b[p],y=a[p];
    while(st<dr){
        while(st<dr&&(double)b[dr]/a[dr]>=(double)x/y)
            --dr;
        a[st]=a[dr];
        b[st]=b[dr];
        while(st<dr&&(double)b[st]/a[st]<=(double)x/y)
            ++st;
        a[dr]=a[st];
        b[dr]=b[st];
        b[st]=x;
        a[st]=y;}
    return st;}
void qsort(int p,int q){
    int m;
    m=divide(p,q);
    if(m-1>p)
        qsort(p,m-1);
    if(m+1<q)
        qsort(m+1,q);}
void solve(){
    int i,e=0,c=0;
    scanf("%d%d",&g,&w);
    for(i=1; i<=g; ++i)
        scanf("%d%d",&a[i],&b[i]);
    qsort(1,g);
    for(i=1; i<=g&&e<w; e+=a[i],c+=b[i],++i);
    printf("%d",c);}
int main(){
    freopen("energii.in","r",stdin);
    freopen("energii.out","w",stdout);
    solve();
    return 0;}