Pagini recente » Cod sursa (job #1649174) | Cod sursa (job #1821363) | Cod sursa (job #747890) | Cod sursa (job #1344759) | Cod sursa (job #2324645)
#include <fstream>
#include <cstring>
using namespace std;
long long n, p, q, k, lng, st, i, j;
long long a[105][105][105], b[105][105][105], c[105];
void suma (long long A[], long long B[], long long C[])
{
int t=0, k=0, i=0;
for (i=1;i<=A[0] || B[0];i++) {
k=A[i]+B[i];
C[i]=k%10;
t=k/10;
}
C[0]=i-1;
if (t!=0) {
C[0]++;
C[i]=t;
}
}
void dif (long long A[], long long B[], long long C[])
{
int t=0, k=0, i=0;
C[0]=A[0];
for (i=1;i<=A[0];i++) {
if (A[i]-t<B[i]) {
k=10+A[i]-B[i];
t=1;
} else {
k=A[i]-t-B[i];
t=0;
}
C[i]=k;
}
while (C[C[0]]==0)
C[0]--;
}
int cmp (long long A[], long long B[])
{
int i=0;
if (A[0]>B[0])
return 1;
if (A[0]<B[0])
return -1;
for (i=A[0];i>=1;i--) {
if (A[i]>B[i])
return 1;
if (A[i]<B[i])
return -1;
}
return 0;
}
int main () {
ifstream fin ("pavare2.in");
ofstream fout ("pavare2.out");
fin>>n>>p>>q;
fin>>k;
a[0][0][1]=1;
a[0][0][0]=1;
b[0][0][1]=1;
b[0][0][0]=1;
a[1][1][1]=1;
a[1][1][0]=1;
a[1][0][1]=1;
a[1][0][0]=1;
b[1][1][1]=1;
b[1][1][0]=1;
b[1][0][1]=1;
b[1][0][0]=1;
for (i=2;i<=n;i++) {
for (j=1;j<=min(i,p);j++) {
memcpy (a[i][j], b[i-j][0], sizeof(b[i-j][0]));
///a[i][j]=b[i-j][0];
suma(a[i][0], a[i][j], a[i][0]);
///a[i][0]+=a[i][j];
}
for (j=1;j<=min(q,i);j++) {
memcpy (b[i][j], a[i-j][0], sizeof(a[i-j][0]));
///b[i][j]=a[i-j][0];
suma(b[i][0], b[i][j], b[i][0]);
///b[i][0]+=b[i][j];
}
}
suma(a[n][0], b[n][0], c);
for(i=c[0];i>=1;i--)
fout<<c[i];
/*
lng=n;
st=0;
while (lng!=0) {
if (st==0) {
if (k>a[lng][0]) {
k-=a[lng][0];
} else {
for (i=p;i>=1;i--) {
if (a[lng][i]>=k) {
for (int cnt=1;cnt<=i;cnt++)
fout<<st;
lng-=i;
break;
} else {
k=k-a[lng][i];
}
}
}
} else {
if (k>b[lng][0]) {
k-=b[lng][0];
} else {
for (i=1;i<=q;i++) {
if (b[lng][i]>=k) {
for (int cnt=1;cnt<=i;cnt++)
fout<<st;
lng-=i;
break;
} else {
k=k-b[lng][i];
}
}
}
}
st=1-st;
}
*/
return 0;
}