Cod sursa(job #1264916)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 16 noiembrie 2014 14:45:47
Problema Ratphu Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 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],fr[11],fact[PMAX];
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++;
            //fr[n%10]++;
            n/=10;
        }
    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][(i*10+cif[viz[auxx]])%p]+=dp[conf-auxx][i];
                    }
            }
    /*fact[1]=1;
    for (i=2;i<=20;i++) fact[i]=1LL*fact[i-1]*i;
    for (i=0;i<=9;i++)
        if (fr[i]!=0)
            dp[maxim-1][0]=1LL*dp[maxim-1][0]*fact[fr[i]];*/
    fout<<dp[maxim-1][0]<<"\n";
    return 0;
}