Pagini recente » Cod sursa (job #1070194) | Cod sursa (job #666555) | Cod sursa (job #2459610) | Borderou de evaluare (job #389637) | Cod sursa (job #466318)
Cod sursa(job #466318)
#include<cstdio>
using namespace std;
int st[100],i,n,ka,cont=0;
void init (int k)
{
st[k]=0;
}
int succesor (int k)
{
if (st[k]<n)
{
st[k]++;
return 1;
}
return 0;
}
int valid (int k)
{
int contor=0,max=0;
for (i=1; i<k; i++)
{
if (st[i]==st[k]) return 0;
if (st[i]>max) max=st[i];
if (max<=i) contor++;
}
if (contor>ka) return 0;
return 1;
}
int solutie (int k)
{
if (k!=n) return 0;
int maxim=0,contor=0;
for (i=1; i<=k; i++)
{
if (st[i]>maxim) maxim=st[i];
if (maxim<=i) contor++;
}
if (contor!=ka) return 0;
return 1;
}
void tipar()
{
for (i=1; i<=n; i++)
printf("%d ",st[i]);
printf("\n");
}
void back (int k)
{
init(k);
while (succesor(k))
{
if (valid(k))
if (solutie(k))
{
cont++;
tipar();
}
else back(k+1);
}
}
int main ()
{
freopen("permutari2.in","r",stdin);
freopen("permutari2.out","w",stdout);
scanf("%d%d",&n,&ka);
if (n==ka) printf("1");
else if (n-ka==1) printf("%d",ka);
else
{
back(1);
printf("%d",cont);
}
return 0;
}