Pagini recente » Cod sursa (job #2182015) | Cod sursa (job #1842230) | Cod sursa (job #1476977) | Cod sursa (job #2868806) | Cod sursa (job #1116958)
#include<stdio.h>
#include<algorithm>
#define DIM 100005
FILE *f=fopen("garaj.in","r"), *g=fopen("garaj.out","w");
using namespace std;
struct caracteristici{
long int c, t; // capacitate, timp
} v[DIM];
long int NrCamioane, NrSticle, Tmin, w[DIM];
void citire(){
long int i;
fscanf(f,"%ld %ld\n",&NrCamioane,&NrSticle);
for(i=1;i<=NrCamioane;i++)
fscanf(f,"%ld %ld\n",&v[i].c,&v[i].t);
}
bool verificare(long int T){
long int i, Sticle;
Sticle=0;
for(i=1;i<=NrCamioane;i++)
Sticle+= ( T/(v[i].t*2) )*v[i].c;
if( Sticle >= NrSticle ) return 1;
return 0;
}
void gasire_timp(){
long int p, u, mij;
p=1; u=2*NrSticle;
while(p<=u){
mij= (p+u)/2;
if( verificare(mij) ) u=mij-1;
else p=mij+1;
} Tmin=p;
fprintf(g,"%ld ",Tmin);
}
bool cmp( long int a, long int b ){
if(a>b)return 1;
return 0;
}
void gasire_camioane(){
long int i, Sticle;
for(i=1;i<=NrCamioane;i++)
w[i]= ( Tmin/(v[i].t*2) )*v[i].c;
sort(w+1,w+NrCamioane+1,cmp);
//for(i=1;i<=NrCamioane;i++){fprintf(g,"%ld ",w[i]);}
Sticle=0; i=1;
while( i<=NrCamioane ){
Sticle+=w[i];
if( Sticle>=NrSticle ) break;
i++;
}
fprintf(g,"%ld\n",i);
}
int main(){
citire();
gasire_timp();
gasire_camioane();
return 0;
}