Cod sursa(job #25581)

Utilizator scapryConstantin Berzan scapry Data 4 martie 2007 13:00:29
Problema Kperm Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#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;
}