Pagini recente » Cod sursa (job #1157429) | Cod sursa (job #2788317) | Cod sursa (job #932455) | Cod sursa (job #1878924) | Cod sursa (job #137491)
Cod sursa(job #137491)
#include <fstream>
std::ifstream f1("garaj.in");
std::ofstream f2("garaj.out");
struct elem
{
int c, t;
};//struct elem
int part(struct elem sir[100010], int jos, int sus);
void qsort(struct elem sir[100010], int jos, int sus);
int part2(struct elem sir[100010], int jos, int sus);
void qsort2(struct elem sir[100010], int jos, int sus);
struct elem camion[100010];
int main()
{
long n, m, i, total, j;
long long timp, fol[100010];
f1>>n>>m;
for (i=0; i<n; i++)
f1>>camion[i].c>>camion[i].t;
qsort2(camion, 0, n-1);
qsort(camion, 0, n-1);
timp=0;
total=1;
while (m>0)
{
m-=camion[0].c;
timp+=camion[0].t;
fol[0]+=camion[0].t;
j=1;
while ((m>0)&&(j<n))
{
while ((fol[j]+camion[j].t)<=timp)
{
if (fol[j]==0)
total++;
fol[j]+=camion[j].t;
m-=camion[j].c;
}//while
j++;
}//while j
}//while
timp*=2;
f2<<timp<<" "<<total;
f1.close();
f2.close();
return 0;
}//main
int part2(struct elem sir[2010], int jos, int sus)
{
int p=jos, q=sus;
struct elem temp;
while (p<q)
{
while ((p<=q)&&(sir[p].c<=sir[jos].c))
p++;
while ((p<=q)&&(sir[q].c>sir[jos].c))
q--;
if (p<q)
{
temp=sir[p];
sir[p]=sir[q];
sir[q]=temp;
}//if
}//while
temp=sir[q];
sir[q]=sir[jos];
sir[jos]=temp;
return q;
}//part2
void qsort2(struct elem sir[2010], int jos, int sus)
{
int p;
if (jos<sus)
{
p=part2(sir, jos, sus);
qsort2(sir, jos, p-1);
qsort2(sir, p+1, sus);
}//if
}//qsort2
int part(struct elem sir[2010], int jos, int sus)
{
int p=jos, q=sus;
struct elem temp;
while (p<q)
{
while ((p<=q)&&((sir[p].c/sir[p].t)>=(sir[jos].c/sir[jos].t)))
p++;
while ((p<=q)&&((sir[q].c/sir[q].t)<(sir[jos].c/sir[jos].t)))
q--;
if (p<q)
{
temp=sir[p];
sir[p]=sir[q];
sir[q]=temp;
}//if
}//while
temp=sir[q];
sir[q]=sir[jos];
sir[jos]=temp;
return q;
}//part
void qsort(struct elem sir[2010], int jos, int sus)
{
int p;
if (jos<sus)
{
p=part(sir, jos, sus);
qsort(sir, jos, p-1);
qsort(sir, p+1, sus);
}//if
}//qsort