Cod sursa(job #3228911)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 11 mai 2024 22:41:30
Problema Ratphu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;

int c[20], p;
long long n, np[1 << 18][20];
// nr[i][j] = numarul de posibilitati cu cifrele din masca i
// care reprezinta un numar nr cu restul nr % p = ji

ifstream fin("ratphu.in");
ofstream fout("ratphu.out");

int main()
{
    fin >> n >> p;
    int len = 0;
    while (n)
    {
        c[len++] = n % 10;
        n /= 10;
    }
    for (int i = 0; i < len / 2; ++i)
        swap(c[i], c[len - i - 1]);

    np[0][0] = 1;
    for (int i = 0; i < (1 << len); ++i)
        for (int j = 0; j < p; ++j)
            if (np[i][j])
                for (int k = 0; k < len; ++k)
                    if ((i & (1 << k)) == 0)
                        np[i | (1 << k)][(j * 10 + c[k]) % p] += np[i][j];

    fout << np[(1 << len) - 1][0];

    return 0;
}