Pagini recente » Cod sursa (job #2296903) | Cod sursa (job #2031221) | Monitorul de evaluare | Cod sursa (job #224947) | Cod sursa (job #2081952)
/// OrangeWarrior #1
#include<bits/stdc++.h>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
long long fr[12],sc,nrd,nc,n,sol,nr,nr2,v[19];
bool use[19];
long long fact(int i)
{
if(i<=1)
return 1;
long long sol=1;
for(int j=2;j<=i;++j)
sol*=j;
return sol;
}
void bt(int k)
{
if(k==nc+1){
if(nr%nrd==0)
sol++;
}
else
for(int i=1;i<=nc;++i)
if(!use[i])
{
nr=nr*10+v[i];
use[i]=1;
bt(k+1);
use[i]=0;
nr/=10;
}
}
int main()
{
f>>n>>nrd;
while(n)
{
fr[n%10]++;
sc=0;
++nc;
v[nc]=n%10;
n/=10;
}
if(nrd==1)
sol=fact(nc);
if(nrd==2)
sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
if(nrd==3)
if(sc%3==0)
sol=fact(nc);
if(nrd==4)
for(int i=4;i<=100;i++)
sol+=(fr[i/10]+fr[i%10])*fact(nc-2);
if(nrd==5)
sol=(fr[0]+fr[5])*fact(nc-1);
if(nrd==6)
if(sc%3==0)
sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
if(nrd==7 || nrd==8)
bt(1);
if(nrd==9)
if(sc%9==0)
sol=fact(nc);
if(nrd==10)
sol=fr[0]*fact(nc-1);
if(nrd==11)
bt(1);
if(nrd==12)
if(sc%3==0)
for(int i=4;i<=100;i++)
sol+=(fr[i/10]+fr[i%10])*fact(nc-2);
if(nrd==14 || nrd==13)
bt(1);
if(nrd==15)
if(sc%3==0)
sol=(fr[0]+fr[5])*fact(nc-1);
if(nrd==16 || nrd==17)
bt(1);
if(nrd==18)
if(sc%9==0)
sol=(fr[0]+fr[2]+fr[4]+fr[6]+fr[8])*fact(nc-1);
if(nrd==19)
bt(1);
if(nrd==20)
sol=fr[0]*(fr[0]+fr[2]+fr[4]+fr[6]+fr[8]-1)*fact(nc-2);
g<<sol<<'\n';
return 0;
}