Pagini recente » Cod sursa (job #2770725) | Cod sursa (job #3219295) | Cod sursa (job #2143906) | Cod sursa (job #42239) | Cod sursa (job #1404524)
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,v[25],f[15],v1[25];
unsigned long long s=0;
unsigned long long factorial(int x)
{
unsigned long long val=1;
for(int i=2;i<=x;++i)
{
val*=(unsigned long long)i;
}
return val;
}
unsigned long long putere(int a,int b)
{
unsigned long long val=1;
for(int i=1;i<=b;++i)
{
val*=(unsigned long long)a;
}
return val;
}
void bkt(int x)
{
if(x==n+1)
{
int sum=0;
for(int i=1;i<=n;++i)
{
sum+=v[i];
}
if(sum%2==0)
{
int ok=0;
for(int i=1;i<=n;++i)
{
v1[i]=v1[i-1]+v[i];
}
for(int i=1;i<=n;++i)
{
for(int j=0;j<i;++j)
{
if(v1[i]-v1[j]==sum/2)
{
ok=1;
break;
}
}
if(ok==1)
break;
}
if(ok==1)
{
memset(f,0,sizeof(f));
for(int i=1;i<=n;++i)
{
f[v[i]]++;
}
unsigned long long p=1;
for(int i=0;i<=9;++i)
{
p*=factorial(f[i]);
}
s+=(factorial(n)/p);
}
}
}
else
{
if(x<=n)
{
for(int i=v[x-1];i<=k;++i)
{
v[x]=i;
bkt(x+1);
}
}
}
}
int main()
{
freopen("ghinion.in","r",stdin);
freopen("ghinion.out","w",stdout);
scanf("%d%d",&n,&k);
bkt(1);
unsigned long long x=putere(k+1,n);
printf("%llu\n",x-s);
return 0;
}