Cod sursa(job #1264936)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 16 noiembrie 2014 14:56:25
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;

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

const int CONFMAX=262150;
const int PMAX=21;

int p,len,cif[PMAX],modulo[1000];
long long n,dp[CONFMAX][PMAX];
map<int,int>viz;

int main()
{
    int i,conf,maxim,aux,auxx;
    fin>>n>>p;
    while (n)
        {
            cif[len]=n%10;
            len++;
            n/=10;
        }
    //preprocesare
    for (i=0;i<1000;i++) modulo[i]=i%p;
    for (i=0;i<len;i++)
        {
            viz[1<<i]=i;
            dp[1<<i][modulo[cif[i]]]=1;
        }

    maxim=1<<len;
    for (conf=1;conf<maxim;conf++)
    {
        aux=conf;
        while (aux)
            {
                auxx=aux^(aux&(aux-1));
                aux-=auxx;
                for (i=0;i<p;i++)
                    dp[conf][modulo[i*10+cif[viz[auxx]]]]+=dp[conf-auxx][i];
            }
    }
    fout<<dp[maxim-1][0]<<"\n";
    return 0;
}