Cod sursa(job #1264920)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 16 noiembrie 2014 14:49:11
Problema Ratphu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 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;
    maxim=1<<len;
    for (conf=1;conf<maxim;conf++)
        if (viz.find(conf)!=viz.end())
            {
                aux=cif[viz[conf]];
                dp[conf][aux%p]=1;
            }
        else
            {
                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;
}