Pagini recente » Cod sursa (job #1185812) | Cod sursa (job #2702575) | Cod sursa (job #583965) | Cod sursa (job #1297472) | Cod sursa (job #1033771)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int N, L,t[101], cA[101], cB[101];
struct om
{
int A, B;
};
vector<om> v;
vector<int> poz;
bool cmp(int a, int b)
{
return v[a].A - v[b].A < v[a].B - v[b].B;
}
int main()
{
int i;
fin>> N>> L;
for( i = 0; i < N; i++)
{
om nou;
fin>> nou.A>> nou.B;
v.push_back(nou);
poz.push_back(i);
}
sort(poz.begin(), poz.end(), cmp);
int mini = 1, maxi = 100, posibil = -1;
while( mini <= maxi)
{
int mij = ( mini + maxi)/2;
int AL = L, BL = L;
for( i = 0; i < N; i++)
{
int cp, cb, timp = 0;
if( i > N-i-1) timp = t[i];
cp = (mij - timp) / v[poz[i]].A;
cb = cp < AL? cp: AL;
AL -= cb;
t[i] = cb * v[poz[i]].A;
timp = 0;
if( i >= N-i-1) timp = t[N - i - 1];
cp = (mij - timp) / v[poz[N - i - 1]].B;
cb = cp < BL? cp: BL;
BL -= cb;
t[N- i - 1] = cb * v[poz[N - i -1]].B;
}
if(!AL && !BL) {
maxi = mij - 1;
posibil = mij;
}
else mini = mij + 1;
}
fout<<posibil<<"\n";
int AL = L, BL = L;
for( i = 0; i < N; i++)
{
int cp, cb, timp = 0;
if( i > N-i-1) timp = t[i];
cp = (posibil - timp) / v[poz[i]].A;
cb = cp < AL? cp: AL;
AL -= cb;
t[i] = cb * v[poz[i]].A;
cA[poz[i]] = cb;
timp = 0;
if( i >= N-i-1) timp = t[N - i - 1];
cp = (posibil - timp) / v[poz[N - i - 1]].B;
cb = cp < BL? cp: BL;
BL -= cb;
t[N- i - 1] = cb * v[poz[N - i -1]].B;
cB[poz[N-i-1]] = cb;
}
for( i = 0; i < N; i++)
fout<<cA[i]<<" "<<cB[i]<<"\n";
return 0;
}