Pagini recente » Cod sursa (job #1653283) | Cod sursa (job #35757) | Cod sursa (job #3140277) | Cod sursa (job #328268) | Cod sursa (job #2848385)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
struct lapte
{
int a, b, ti;
}v[101];
bool comp (lapte a, lapte b)
{
if (a.a == b.a)
return a.b > b.b;
return a.a < b.a;
}
int n, i, j, L, tc, da[1001], outA[1001][1001], outB[1001][1001], db[1001], dA[1001], dB[1001], poza, pozb, mxa, mxb;
int main()
{
fin >> n >> L; mxa = 1e2; mxb = 1e2;
for (i = 1; i <= n; i++)
{
fin >> v[i].a >> v[i].b;
v[i].ti = i;
mxa = min (mxa, v[i].a);
mxb = min (mxb, v[i].b);
}
sort (v+1, v+n+1, comp);
poza = pozb = max (mxa, mxb)*L;
for (i = 1; i <= n; i++)
{
for (j = 0; j <= min (max(poza, pozb), 1000); j++)
{
if (poza > pozb)
{
for (tc = j+v[i].a; tc <= min (max(poza, pozb), 1000); tc++)
dA[tc]++;
j+=v[i].a;
outA[v[i].ti][j] = 1;
}
else if (poza == pozb && v[i].a <= v[i].b)
{
for (tc = j+v[i].a; tc <= min (max(poza, pozb), 1000); tc++)
dA[tc]++;
j+=v[i].a;
outA[v[i].ti][j] = 1;
}
else
{
for (tc = j+v[i].b; tc <= min (max(poza, pozb), 1000); tc++)
dB[tc]++;
j+=v[i].b;
outB[v[i].ti][j] = 1;
}
for (int fi = poza; fi > 0; fi--)
if (dA[fi] == L) poza = fi;
for (int fi = pozb; fi > 0; fi--)
if (dB[fi] == L) pozb = fi;
j--;
}
for (j = 0; j <= min (max(poza, pozb), 1000); j++)
da[j] = dA[j], db[j] = dB[j];
}
fout << max (poza, pozb) << "\n";
for (i = 1; i <= n; i++)
{
int Ao = 0, Bo = 0;
for (j = 1; j <= max(poza, pozb); j++)
if (outA[i][j]) Ao++;
for (j = 1; j <= max(poza, pozb); j++)
if (outB[i][j]) Bo++;
fout << Ao << " " << Bo << "\n";
}
return 0;
}