Pagini recente » Cod sursa (job #428080) | Cod sursa (job #2631686) | Cod sursa (job #849351) | Cod sursa (job #363787) | Cod sursa (job #25581)
Cod sursa(job #25581)
#include <stdio.h>
enum { maxn = 5001, modulo = 666013 };
int n, k;
int p[maxn];
bool v[maxn];
int pos;
int count;
void bkt()
{
if(pos == n)
{
int i, sum = 0;
for(i = 0; i < k; i++)
sum += p[i];
if(sum % k != 0) return;
for(i = k; i < n; i++)
{
sum -= p[i - k];
sum += p[i];
if(sum % k != 0) return;
}
count++;
count %= modulo;
return;
}
for(p[pos] = 1; p[pos] <= n; p[pos]++)
if(!v[ p[pos] ])
{
v[ p[pos] ] = true;
pos++;
bkt();
pos--;
v[ p[pos] ] = false;
}
}
int main()
{
FILE *f = fopen("kperm.in", "r");
if(!f) return 1;
fscanf(f, "%d%d", &n, &k);
fclose(f);
f = fopen("kperm.out", "w");
if(!f) return 1;
if(k % 2) bkt();
fprintf(f, "%d\n", count);
fclose(f);
return 0;
}