Pagini recente » Cod sursa (job #2443756) | Cod sursa (job #46957) | Cod sursa (job #1765956) | Cod sursa (job #593012) | Cod sursa (job #1065042)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ratphu.in");
ofstream g("ratphu.out");
int n,p,b,cif[20];
long long dp[1<<18][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]+=dp[i][r];
g<<dp[(1<<k)-1][0];
return 0;
}