Pagini recente » Cod sursa (job #1677173) | Cod sursa (job #465647)
Cod sursa(job #465647)
#include <fstream>
using namespace std;
short int s[1<<4],k;
long long cnt;
ifstream in("ratphu.in");
ofstream out("ratphu.out");
void bkt(long long nr,int p,int rest)
{
if (p==s[10]+1)
{
if (!rest)
cnt+=nr;
return;
}
for (int i=0;i<10;i++)
if (s[i])
{
s[i]--;
bkt(nr*(s[i]+1),p+1,(rest*10+i)%k);
s[i]++;
}
}
long long fact(int x)
{
long long c=1;
for (int i=1;i<=x;i++)
c*=i;
return c;
}
int main()
{
int i;
char a[1<<5];
in>>a>>k;
if (k==2 || k==5)
{
for (i=0;a[i];i++)
if ((a[i]-'0')%k==0)
cnt++;
cnt*=fact(i-1);
out<<cnt<<"\n";
return 0;
}
if (k==3 || k==9)
{
for (i=0;a[i];i++)
cnt+=a[i]-'0';
if (cnt%k==0)
out<<fact(i)<<"\n";
else
out<<"0\n";
return 0;
}
for (i=0;a[i];i++)
s[a[i]-'0']++;
s[10]=i;
if (k==10)
{
out<<s[0]*fact(s[10]-1)<<"\n";
return 0;
}
if (k==20)
{
out<<s[0]*(s[0]+s[2]+s[4]+s[6]+s[8]-1)*fact(s[10]-2)<<"\n";
return 0;
}
bkt(1,1,0);
out<<cnt<<"\n";
return 0;
}