Cod sursa(job #1663349)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 25 martie 2016 21:02:27
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <cstdio>
#define MAXN 100
int mat[MAXN+1][MAXN+1][MAXN+1],n,A[MAXN+1],B[MAXN+1],l;
int lin,col,z,nextl[MAXN+1][MAXN+1][MAXN+1],nextc[MAXN+1][MAXN+1][MAXN+1],vl[MAXN+1],vc[MAXN+1];
inline int cauta(int rez){
    int i,j,i1,j1,flag=0,x;
    for(i=0;i<=l;i++)
        for(j=0;j<=l;j++)
          for(x=0;x<=l;x++)
             mat[i][j][x]=0;
    mat[0][0][0]=1;
    for(i=1;i<=n&&flag==0;i++){
        j=0;
        while(A[i]*j<=rez&&flag==0){
            x=(rez-A[i]*j)/B[i];
            if(x*B[i]==rez-A[i]*j)
            for(i1=0;i1<=l&&flag==0;i1++)
              for(j1=0;j1<=l&&flag==0;j1++){
                  if(mat[i-1][i1][j1]==1&&i1+j>=l&&j1+x>=l){
                    flag=1;
                    vl[i]=j;
                    vc[i]=x;
                    lin=i1;
                    col=j1;
                    z=i-1;
                  }
                  else
                    if(i1+j<=l&&j1+x<=l){
                     if(mat[i-1][i1][j1]==1){
                        mat[i][i1+j][j1+x]=1;
                        nextl[i][i1+j][j1+x]=i1;
                        nextc[i][i1+j][j1+x]=j1;
                     }
                    }
              }
            j++;
        }
    }
    return flag;
}
int main(){
    FILE*fi,*fout;
    int pas,rez,i,auxl,auxc;
    fi=fopen("lapte.in" ,"r");
    fout=fopen("lapte.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&l);
    for(i=1;i<=n;i++)
        fscanf(fi,"%d%d" ,&A[i],&B[i]);
    rez=0;
    for(pas=1<<7;pas;pas>>=1)
        if(cauta(rez+pas)==0)
           rez+=pas;
    fprintf(fout,"%d\n" ,rez+1);
    cauta(rez+1);
    while(z>0){
        vl[z]=lin-nextl[z][lin][col];
        vc[z]=col-nextc[z][lin][col];
        auxl=lin;
        auxc=col;
        lin=nextl[z][auxl][auxc];
        col=nextc[z][auxl][auxc];
        z--;
    }
    for(i=1;i<=n;i++)
        fprintf(fout,"%d %d\n" ,vl[i],vc[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}