Pagini recente » Cod sursa (job #2305516) | Cod sursa (job #2251457) | Cod sursa (job #80953) | Cod sursa (job #599877) | Cod sursa (job #137203)
Cod sursa(job #137203)
#include<stdio.h>
FILE*fin=fopen("garaj.in","r");
FILE*fout=fopen("garaj.out","w");
#define maxn 100001
int c[maxn],s[maxn],t[maxn],n,m,tmin;
void rech(int nod,int dim)
{
int nd=nod,min=s[nod],st,dr,aux;
st=nod<<1;dr=st+1;
if(s[st]<min&&st<=dim){min=s[st];nd=st;}
if(s[dr]<min&&dr<=dim){min=s[dr];nd=dr;}
if(nd!=nod)
{
aux=s[nod];
s[nod]=s[nd];
s[nd]=aux;
rech(nd,dim);
}
}
void ord()
{
int i,aux,dim;
for(i=n/2;i>=1;i--)
rech(i,n);
dim=n;
while(dim>1)
{
aux=s[dim];
s[dim]=s[1];
s[1]=aux;
dim--;
rech(1,dim);
}
}
int posibil(int k)
{
int ns=0,i,nd;
for(i=1;i<=n;i++)
{
nd=k/t[i];
ns+=(nd/2*c[i]);
if(ns>=m) return 1;
}
return 0;
}
int cb()
{
int ts=1,td=1000,tmij;
while(ts<td)
{
tmij=(ts+td)/2;
if(posibil(tmij)) td=tmij;
else ts=tmij+1;
}
return ts;
}
int main()
{
int i,ns;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
fscanf(fin,"%d%d",&c[i],&t[i]);
fclose(fin);
tmin=cb();
for(i=1;i<=n;i++)
s[i]=(tmin/t[i])/2*c[i];
ord();
ns=0;
for(i=1;i<=n;i++)
{
ns+=s[i];
if(ns>=m) break;
}
fprintf(fout,"%d%c%d",tmin,' ',i);
fclose(fout);
return 0;
}