Cod sursa(job #2322796)

Utilizator mihaimodiMihai Modi mihaimodi Data 18 ianuarie 2019 13:21:13
Problema Pavare2 Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <fstream>
using namespace std;
ifstream fin("pavare2.in");
ofstream fout("pavare2.out");
long long a[101][101],b[101][101],x,nrOrd;
int stare,n,ma,mb,k;
//op pe numere mari
/*
int suma(int v1[][],v2[][],v3[][])
{

}
int diferenta(int v1[][],v2[][],v3[][])
{

}
int comparare(int v1[][],v2[][],v3[][])
{

}
*/
int main()
{
    fin>>n>>ma>>mb>>nrOrd;
    a[0][0]=b[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=min(ma,i);j++)
        {
            a[i][j]=b[i-j][0];
            a[i][0]+=a[i][j];
        }
        for(int j=1;j<=min(mb,i);j++)
        {
            b[i][j]=a[i-j][0];
            b[i][0]+=b[i][j];
        }
    }
    fout<<a[n][0]+b[n][0]<<'\n';

    stare=0;
    x=n;
    while(x)
    {
        if(stare==0)
        {
            if(nrOrd>a[x][0])
                nrOrd-=a[x][0];
            else
            {
                  int j;
                  for(j=ma;a[x][j]<nrOrd&&j>=1;j--)
                          nrOrd-=a[x][j];

                  if(j>=1)
                  {
                        for(int l=1;l<=j;l++)
                              fout<<0;
                        x-=j;
                  }
            }
        }
        else
        {
            if(nrOrd>b[x][0])
                nrOrd-=b[x][0];
            else
            {
                  int j;
                  for(j=1;b[x][j]<nrOrd&&j<=mb;j++)
                        nrOrd-=b[x][j];

                  if(j>=1)
                  {
                        for(int l=1;l<=j;l++)
                              fout<<1;
                        x-=j;
                  }
            }
        }
        stare=!stare;
    }
    return 0;
}