Cod sursa(job #467417)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 28 iunie 2010 20:52:20
Problema Ratphu Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define file_in "ratphu.in"
#define file_out "ratphu.out"

#define nmax 100

int v[nmax];
int sol,n;
int P;
int nr;
char ch;
long long d[1<<18][20];



void citire()
{
    int i,l;
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    nr=0;
    scanf("%lld %lld",&n, &P);

    while(n)
    {
        v[nr]=n%10;
        n/=10;
        nr++;
    }

    int st=1,dr=n,aux;
    while(st<=dr)
    {
        aux=v[st];
        v[st]=v[dr];
        v[dr]=aux;
    }



}


void solve()
{
    int i,j,k;
    d[0][0]=1;
	for (i=0;i<(1<<nr);++i)
		for (j=0;j<P;++j)
			if (d[i][j])
				for (k=0;k<nr;++k)
					if ((i&(1<<k))==0)
						d[i|(1<<k)][(j*10+v[k])%P]+=d[i][j];


        printf("%lld\n", d[(1<<nr)-1][0]);

}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}