Pagini recente » Cod sursa (job #2167782) | Cod sursa (job #106185) | Cod sursa (job #832526) | Cod sursa (job #814074) | Cod sursa (job #1264061)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
char sir[25];
int p,a[25],n,prod[30][30];
vector <int> biti[(1<<18)+5];
long long dp[(1<<18)+5][25];
inline void Precalcul()
{
int i,j,val;
for(i=0;i<(1<<n);++i)
for(j=0;j<n;++j)
if(((1<<j)&i)==0)
biti[i].push_back(j);
for(i=0;i<=20;++i)
{
val=i*10;
for(j=0;j<=20;++j)
prod[i][j]=(val+j)%p;
}
}
int main()
{
int i,stare,j;
vector <int>::iterator it;
freopen ("ratphu.in","r",stdin);
freopen ("ratphu.out","w",stdout);
scanf("%s %d", sir,&p);
n=strlen(sir);
Precalcul();
for(i=0;i<n;++i) a[i]=sir[i]-'0';
dp[0][0]=1;
for(stare=0;stare<(1<<n)-1;++stare)
for(j=0;j<p;++j)
for(it=biti[stare].begin();it!=biti[stare].end();++it)
dp[stare|(1<<*it)][ prod[j][a[*it]] ]+=dp[stare][j];
printf("%lld\n", dp[(1<<n)-1][0]);
return 0;
}