Cod sursa(job #2337371)

Utilizator MYSOULBobei Razvan-Marian MYSOUL Data 6 februarie 2019 12:22:07
Problema Ratphu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
using namespace std;
int cifre[20],resturi[1<<18][20],puteri[20];
int nr_cifre(int x)
{
  int nr = -1;
  puteri[0] = 1;
  while(x)
  {
   cifre[++nr] = x%10;
   puteri[nr+1] = puteri[nr]*10;
   x/=10;
  }
 return nr+1;
}
int biti(int n)
{ int num = 0;
 do num++; while (n &= n - 1);
 return num;
}
int main()
{ int N , P;
  cin >> N >> P;
  int n = nr_cifre(N);
  for(int i = 0 ; i < n ; i ++)
    resturi[1<<i][cifre[i]%P] += 1 ;
  for(int configuratie = 1 ; configuratie < 1<<n ; configuratie++)
  {
    int m = biti(configuratie);
    for(int i = 0 ; i < P ; i++)
     if(resturi[configuratie][i])
      for(int j = 0 ; j < n ; j++)
       { int var = (configuratie)&(1<<j);
         if(var==0)
         resturi[configuratie+(1<<j)][(i+puteri[m]*cifre[j])%P] += resturi[configuratie][i] ;
       }
   }
  cout << resturi[(1<<n)-1][0] << "\n";
    return 0;
}