Pagini recente » Cod sursa (job #1833265) | Cod sursa (job #3213830) | Cod sursa (job #1769382) | Cod sursa (job #112483) | Cod sursa (job #1233577)
#include <fstream>
#include <cstring>
#define Nmax 202
#define In "perm.in"
#define Out "perm.out"
using namespace std;
int s[2][Nmax][501], N, K;
ofstream g(Out);
inline void Read()
{
ifstream f(In);
f>>N>>K;
f.close();
}
void mul(int A[], int B)
{
int i, t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
A[0] = i - 1;
}
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
inline void Write(int a[])
{
for(int i = a[0]; i; --i)
g<<a[i];
g<<"\n";
}
inline void Solve()
{
int lin,aux[501],i, j;
s[1][1][0] = s[1][1][1] = 1;
for(i = 2,lin = 0;i <= N; ++i,lin^=1)
{
for(j = 1;j <= K && j <= i; ++j)
{
memset(s[lin][j],0,sizeof(s[lin][j]));
s[lin][j][0] = 1;
memcpy(aux,s[lin^1][j],sizeof(s[lin^1][j]));
mul(aux,i-1);
add(aux,s[lin^1][j-1]);
add(s[lin][j],aux);
}
}
}
int main()
{
Read();
Solve();
Write(s[N&1][K]);
return 0;
}