Cod sursa(job #1336495)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 7 februarie 2015 19:54:13
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

ifstream is("ratphu.in");
ofstream os("ratphu.out");

string S;
int P, N, remainder, j, k;
int C[20];
long long D[1<<20][20], nr, i;

int main()
{
    is >> S >> P;
    N = S.size();
    for ( int i = 0; i < N; ++i )
        C[i] = S[i]-'0';

    D[0][0] = 1;
    nr = (1<<(N));

    for (  i = 0; i < nr; ++i )
        for ( j = 0; j < N; ++j )
        {
            if ( !(i & (1<<j)) )
            {
                for ( k = 0; k < P; ++k )
                {
                    if ( D[i][k] != 0 )
                    {
                        remainder = (k * 10 + C[j])%P;
                        D[i | (1<<j)][remainder] += D[i][k];
                    }
                }
            }
        }

    os << D[(1<<N)-1][0];

    is.close();
    os.close();
    return 0;
}