Pagini recente » Cod sursa (job #2754321) | Cod sursa (job #2033841) | Cod sursa (job #1886288) | Cod sursa (job #943221) | Cod sursa (job #2058953)
#include <fstream>
#include <algorithm>
#define dim 101
using namespace std;
struct OM
{
int a,b,c;
int ord;
}PRIETEN[dim];
OM P[dim];
int N,L,ramas[dim],sol[dim],A[dim],B[dim];
bool cond(OM A, OM B)
{
return A.c<B.c;
}
bool calcul(int t)
{
//vedem daca ne incadram in timpul t
int total=L,i=1;
//rsetam timpii disponibili
for(i=1;i<=N;++i)
ramas[i]=t;
i=1;
while(total>0 and i<=N)
{
if(total-t/PRIETEN[i].a>=0)
{
total=total-t/PRIETEN[i].a;
ramas[i]=0;
}
else
{
ramas[i]=ramas[i]-total*PRIETEN[i].a;
total=0;
}
++i;
}
if(total>0)
return 0;
else
{
total=L,i=N;
while(total>0 and i>=1)
{
total=total-ramas[i]/PRIETEN[i].b;
--i;
}
if(total>0)
return 0;
if(total<=0)
{
for(i=1;i<=N;++i)
{
// if(ramas[i]==0)
// sol[i]=t/PRIETEN[i].a;
// else
// sol[i]=(t-ramas[i])/PRIETEN[i].a;
sol[i]=ramas[i];
}
return 1;
}
}
}
int main()
{
ifstream f("lapte.in");
ofstream g("lapte.out");
int i,j,Tmin,timp;
int st,dr,mij,solutie;
f>>N>>L;
for(i=1;i<=N;++i)
{
f>>PRIETEN[i].a>>PRIETEN[i].b;
P[i]=PRIETEN[i];
PRIETEN[i].c=PRIETEN[i].a-PRIETEN[i].b;
PRIETEN[i].ord=i;
}
sort(PRIETEN+1,PRIETEN+N+1,cond);
/******************************************************************************/
//for(i=1;i<=N;++i)
//{
// g<<PRIETEN[i].a<<" "<<PRIETEN[i].b<<" "<<PRIETEN[i].c<<" "<<PRIETEN[i].ord<<'\n';
//}
/******************************************************************************/
Tmin=max(PRIETEN[1].a*L,PRIETEN[N].b*L);
st=1;
dr=Tmin;
solutie=Tmin;
while(st<=dr)
{
mij=(st+dr)/2;
if(calcul(mij))
{
solutie=mij;
dr=mij-1;
}
else
st=mij+1;
}
g<<solutie<<'\n';
/******************************************************************************/
for(i=1;i<=N;++i)
{
//g<<(solutie-sol[i])/PRIETEN[i].a<<" "<<sol[i]/PRIETEN[i].b<<" "<<PRIETEN[i].ord<<'\n';
j=PRIETEN[i].ord;
A[j]=(solutie-sol[i])/PRIETEN[i].a;
B[j]=sol[i]/PRIETEN[i].b;
}
/******************************************************************************/
for(i=1;i<=N;++i)
g<<A[i]<<" "<<B[i]<<'\n';
return 0;
}