Pagini recente » Cod sursa (job #51140) | Cod sursa (job #2248360) | Cod sursa (job #1894818) | Monitorul de evaluare | Cod sursa (job #662042)
Cod sursa(job #662042)
#include <fstream>
#include <string.h>
using namespace std;
int v[101][101],A[101],B[101],l,n,T,sol[2][101],cr[101][101],wak;
int ver(int t) {
int i,j,x[101][101],var,dund[101][101];
memset (x,-1,sizeof(x));
x[0][0]=0;
for (i=1; i<=n; i++)
for (j=0; j<=l; j++)
for (var=0; var<=t; var++)
if (j-var/A[i]>=0)
if (x[i-1][j-var/A[i]]>=0)
if (x[i-1][j-var/A[i]]+(t-var)/B[i]>x[i][j]) {
dund[i][j]=j-var/A[i];
x[i][j]=x[i-1][j-var/A[i]]+(t-var)/B[i];
}
if (x[n][l]>=l) {
memcpy(v,x,sizeof(x));
for (i=2; i<=n; i++)
for (j=0; j<=l; j++)
cr[i][j]=dund[i][j];
return 1;
}
else return 0;
}
void bs(int lo, int hi) {
int mid;
if (hi>=lo) {
mid=lo+(hi-lo)/2;
if (ver(mid)) {
T=mid;
bs(lo,mid-1);
}
else bs(mid+1,hi);
}
}
int main() {
ifstream f("lapte.in");
ofstream g("lapte.out");
f>>n>>l;
int i;
for (i=1; i<=n; i++)
f>>A[i]>>B[i];
bs(1,101);
g<<T<<'\n';
wak=l;
for (i=n; i>=1; i--) {
sol[0][i]=wak-cr[i][wak];
sol[1][i]=v[i][wak]-v[i-1][cr[i][wak]];
wak=cr[i][wak];
}
for (i=1; i<=n; i++)
g<<sol[0][i]<<' '<<sol[1][i]<<'\n';
g.close();
return 0;
}