Pagini recente » Cod sursa (job #84786) | Cod sursa (job #2031912)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("ratphu.in");
ofstream g ("ratphu.out");
int k,v[33],p[33],mod;
long long p10[33],n,sol;
bool check()
{
long long usu=0;
for(int i=1;i<=k;++i) usu=usu+v[p[i]]*p10[i];
if(usu%mod==0) return true;
return false;
}
void solve()
{
while(next_permutation(p+1,p+k+1))
{
if(check()==true) ++sol;
}
}
long long factorial(int k)
{
long long sol=1;
for(int i=2;i<=k;++i) sol=sol*(1ll*i);
return sol;
}
void solve1()
{
while(n)
{
++k;
n/=10;
}
g<<factorial(k);
}
void solve2()
{
int par=0;
long long noroc;
while(n)
{
if(n%2==0) ++par;
n/=10;
++k;
}
noroc=factorial(k);
noroc=noroc/k*par;
g<<noroc;
}
void solve3()
{
while(n)
{
++k;
n/=10;
}
if(n%3==0) g<<factorial(k);
else g<<0;
}
void solve5()
{
int n5=0;
long long noroc;
while(n)
{
if(n%5==0) ++n5;
n/=10;
++k;
}
noroc=factorial(k);
noroc=noroc/k*n5;
g<<noroc;
}
void solve6()
{
int par=0;
long long noroc;
if(n%3!=0)
{
g<<0;
return;
}
while(n)
{
if(n%2==0) ++par;
n/=10;
++k;
}
noroc=factorial(k);
noroc=noroc/k*par;
g<<noroc;
}
void solve9()
{
while(n)
{
++k;
n/=10;
}
if(n%9==0) g<<factorial(k);
else g<<0;
}
void solve10()
{
int zero=0;
long long noroc;
while(n)
{
if(n%10==0) ++zero;
++k;
n/=10;
}
noroc=factorial(k);
noroc=noroc/k*zero;
}
void solve15()
{
int n5=0;
long long noroc;
if(n%3!=0)
{
g<<0;
return;
}
while(n)
{
if(n%5) ++n5;
n/=10;
++k;
}
noroc=factorial(k)/k*n5;
g<<noroc;
}
int main()
{
f>>n>>mod;
if(mod==1)
{
solve1();
return 0;
}
if(mod==2)
{
solve2();
return 0;
}
if(mod==3)
{
solve3();
return 0;
}
if(mod==5)
{
solve5();
return 0;
}
if(mod==6)
{
solve6();
return 0;
}
if(mod==9)
{
solve9();
return 0;
}
if(mod==10)
{
solve10();
return 0;
}
if(mod==15)
{
solve15();
return 0;
}
p10[1]=1;
for(int i=2;i<=17;++i)
{
p10[i]=p10[i-1]*10;
}
while(n)
{
v[++k]=n%10;
n/=10;
p[k]=k;
}
if(check()) ++sol;
solve();
g<<sol;
return 0;
}