Cod sursa(job #2305360)

Utilizator laurpoppopescu laurentiu laurpop Data 19 decembrie 2018 23:12:04
Problema Pavare2 Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#include<cstring>
#include<algorithm>
#define MAXN 105
#define NRC 35
using namespace std;
long long n,a,b,k,A[MAXN][MAXN],B[MAXN][MAXN],i,j;
ifstream f("pavare2.in");
ofstream g("pavare2.out");
void Citire(){
 f>>n>>a>>b;
 f>>k;
}
void Calculare_a(){
    int i,j;
    A[0][0]=B[0][0]=1;
  A[1][1]=B[1][1]=B[1][0]=A[1][0]=1;
  for(i=2;i<=n;i++){
    for(j=1;j<=a&&j<=i;j++){
        A[i][j]=B[i-j][0];
        A[i][0]+=A[i][j];
    }
    for(j=1;j<=b&&j<=i;j++){
        B[i][j]=A[i-j][0];
        B[i][0]+=B[i][j];
    }
  }
g<<A[n][0]+B[n][0]<<'\n';
}
void DezmembrareK(){

int l=n,stare=0;
while(l>0)
{
     if(stare==0){
        for(i=min(1ll*n,1ll*l);i>=1;i--)
            if(k>A[l][i])
                k=k-A[l][i];
            else
            {
                for(j=1;j<=i;j++)
                   g<<0;
                l=l-i;

                break;
            }
             stare=1;
     }
     else{
       for(i=1;i<=min(1ll*n,1ll*l);i++)
          if(k>B[l][i])
             k-=B[l][i];
          else
          {
              for(j=1;j<=i;j++)
                 g<<1;
               l=l-i;
               break;
          }
          stare=0;
     }


}

}
int main(){

    Citire();
    Calculare_a();
    DezmembrareK();

return 0;
}