Cod sursa(job #1065045)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 22 decembrie 2013 18:18:15
Problema Ratphu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#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;}

    for(i=1;i<=k/2;i++)
     cif[i]=cif[k-i+1];

    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;
}