Pagini recente » Cod sursa (job #1491822) | Cod sursa (job #768935) | Cod sursa (job #1588402) | Cod sursa (job #68922) | Cod sursa (job #808498)
Cod sursa(job #808498)
#include <fstream>
#include <algorithm>
using namespace std;
short m[2][500][200];
void add(short *a, short *b) {
int i, t;
for(i = 1, t = 0; i <= a[0] || i <= b[0] || t; t /= 10, ++i)
a[i] = (t += (i <= a[0] ? a[i] : 0) + (i <= b[0] ? b[i] : 0)) % 10;
a[0] = i - 1;
}
void assign(short *a, short *b) {
a[0] = b[0];
for(int i = 1; i <= b[0]; ++i)
a[i] = b[i];
}
int main(void) {
int n, d, k;
ifstream fin("expozitie.in");
fin >> n >> d >> k;
fin.close();
ofstream fout("expozitie.out");
if(n - k * d < 0)
fout << 0;
else if(n - k * d == 0)
fout << 1;
else {
int fl=0, sl=1;
for(int i = 1, l = (n - k * d) + d - 1; i <= l; ++i, swap(fl, sl)) {
m[sl][0][0] = m[sl][0][1] = 1;
m[sl][i][0] = m[sl][i][1] = 1;
for(int j = 1; j < i; ++j) {
assign(m[sl][j], m[fl][j]);
add(m[sl][j], m[fl][j-1]);
}
}
for(int i = m[fl][d-1][0]; i >= 1; --i)
fout << m[fl][d-1][i];
}
fout.close();
}