Pagini recente » Cod sursa (job #2818099) | Cod sursa (job #290799) | Cod sursa (job #2634419) | Cod sursa (job #2715656) | Cod sursa (job #2848357)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
struct lapte
{
int a, b;
}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], 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;
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;
}
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;
}
else
{
for (tc = j+v[i].b; tc <= min (max(poza, pozb), 1000); tc++)
dB[tc]++;
j+=v[i].b;
}
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);
return 0;
}