Cod sursa(job #466350)

Utilizator SmarandaMaria Pandele Smaranda Data 26 iunie 2010 13:13:35
Problema Permutari2 Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 1.05 kb
#include<stdio.h>
#include<string.h>
long s[10];
long viz[10];
long f[10];
long n,numt=0,k;
void af ()
{
	long i,j,num=0,ok=1;
	for (i=1;i<=n;i++)
	{
		memset(f,0,sizeof(f));
		for (j=1;j<=i;j++)
			f[s[j]]++;
		ok=1;
		for (j=1;j<=i && ok;j++)
			if (f[j]==0)
				ok=0;
		if (ok)
			{num++;
			}
	}
	if (num==k)
		numt++;
	numt=numt%10007;
}

int main ()
{
	long i,gata,st,dr,aux,min,j,poz;
	
	freopen("permutari2.in","r",stdin);
	freopen("permutari2.out","w",stdout);
	
	scanf("%ld%ld",&n,&k);
	gata=0;
	for (i=1;i<=n;i++)
		s[i]=i;
	af();
	while (!gata)
	{
		for (i=n-1;i>=1;i--)
			if (s[i]<s[i+1])
			{
				break;
			}
		if (i<1)
			gata=1;
		else
		{
			min=2000000000;
			for (j=i+1;j<=n;j++)
			{
				if (s[j]<min && s[j]>s[i])
					{
						min=s[j];
						poz=j;
					}
			}
			aux=s[i];
			s[i]=s[poz];
			s[poz]=aux;
			st=i+1;
			dr=n;
			while (st<dr)
			{
				aux=s[st];
				s[st]=s[dr];
				s[dr]=aux;
				st++;
				dr--;
			}
			af();
		}
	}
	printf("%ld\n",numt%10007);
	return 0;
}