Pagini recente » Cod sursa (job #2515377) | Cod sursa (job #278877) | Cod sursa (job #1918999) | Cod sursa (job #2573707) | Cod sursa (job #2330403)
#include <cstdio>
using namespace std;
int ct = 0 , m , n;
const int NMAX = 25;
const int NMAX1 = 5005;
const int MOD = 666013;
int st[NMAX];
bool viz[NMAX];
int fact[NMAX1];
inline void genereazaFactorial(int n)
{
fact[0] = 1;
for(int i = 1 ; i <= n ; i++)
fact[i] = 1ll*(fact[i-1]*i)%MOD;
}
void backtracking(int k)
{
if(k == n+1)
{
int sum = 0;
for(int i = 1 ; i <= m ; i++)
sum += st[i];
if(sum % m != 0)
return;
for(int i = m+1 ; i < k ; i++)
{
sum -= st[i-m];
sum += st[i];
if(sum % m != 0)
return;
}
ct++;
ct %= MOD;
return;
}
for(int i = 1 ; i <= n ; i++)
{
st[k] = i;
if(!viz[st[k]])
{
viz[st[k]] = 1;
backtracking(k+1);
viz[st[k]] = 0;
}
}
}
int main()
{
freopen("kperm.in","r",stdin);
freopen("kperm.out","w",stdout);
scanf("%d%d",&n,&m);
if(n <= 20)
{
backtracking(1);
printf("%d",ct);
return 0;
}
if(n == m)
{
genereazaFactorial(5000);
printf("%d",fact[n]);
}
return 0;
}