Pagini recente » Cod sursa (job #1666407) | Cod sursa (job #1942725) | Cod sursa (job #1061893) | Cod sursa (job #764756) | Cod sursa (job #1065052)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
int p,b,cif[20];
long long n,dp[1<<20][20];
int main()
{ int i,r=0,k=0;
f>>n>>p;
while(n)
{k++; cif[k]=n%10; n/=10;}
dp[0][0]=1;
/// dp[i][j] = nr. posibilitatilor de a forma permutari
/// (cu submultimea i a cifrelor lui n) care sa dea restul j la impartirea cu p
for(i=0;i<(1<<k);i++)
for(r=0;r<p;r++)
if (dp[i][r]>0)
for(b=0;b<k;b++)
if ((i&(1<<b))==0)
dp[i+(1<<b)][(r*10+cif[b+1])%p]+=1LL*dp[i][r];
g<<dp[(1<<k)-1][0];
return 0;
}