Pagini recente » Rezultatele filtrării | Clasament d | Cod sursa (job #2023042) | Clasament conc | Cod sursa (job #465840)
Cod sursa(job #465840)
#include <stdio.h>
#define MAXN 25
int T[MAXN];
long long a[(1<<19) + 10][MAXN];
int R[MAXN][MAXN];
int v[MAXN];
char ch;
int i,j,k,P,nr,M;
int main()
{
freopen("ratphu.in","r",stdin);
freopen("ratphu.out","w",stdout);
scanf("%c",&ch);
nr = -1;
while (ch!=' '){
v[++nr] = ch-'0';
scanf("%c",&ch);
}
scanf("%d",&P);
a[0][0] = 1LL;
M = (1<<(nr+1));
for (i=0; i<=nr; ++i)
T[i] = 1<<i;
for (i=0; i<P; ++i)
for (j=0; j<=9; j++)
R[i][j] = (i*10 + j) % P;
for (i=0; i<M; ++i)
for (j=0; j<=nr; ++j)
if ( !(i & T[j] ) )
for (k=0; k<P; ++k)
a[i | T[j] ][ R[k][v[j]] ] += a[i][k];
//nu afiseaza bine long long-uri :-??...
long long x = a[M-1][0];
nr = 0;
while (x){
v[++nr] = x%10;
x/=10;
}
for (i=nr; i>=1; --i)
printf("%d",v[i]);
printf("\n");
return 0;
}