Cod sursa(job #2337375)

Utilizator MYSOULBobei Razvan-Marian MYSOUL Data 6 februarie 2019 12:24:01
Problema Ratphu Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream fin("ratphu.in");
ofstream fout("ratphu.out");
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;
  fin >> 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] ;
       }
   }
  fout << resturi[(1<<n)-1][0] << "\n";
    return 0;
}