Pagini recente » Cod sursa (job #926058) | Cod sursa (job #2393407) | Cod sursa (job #2339278) | Cod sursa (job #445665) | Cod sursa (job #1340923)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 2505
#define K 505
using namespace std;
int n,m,i,j,k,a[2][K][805],v[N];
void add(int A[],int B[])
{
int i,t=0;
for (i=1;i<=A[0]||i<=B[0]||t;i++,t/=1000000000)
A[i]=(t+=A[i]+B[i])%1000000000;
A[0]=i-1;
}
int main()
{
freopen("mult.in","r",stdin);
freopen("mult.out","w",stdout);
scanf("%d %d",&n,&k);
for (i=1;i<=n;i++)
scanf("%d",&v[i]);
a[0][0][0]=1; a[0][0][1]=1;
for (i=1;i<=n;i++)
{
for (j=0;j<k;j++)
add(a[i%2][(j*10+v[i])%k],a[(i-1)%2][j]);
for (j=0;j<k;j++) add(a[i%2][j],a[(i-1)%2][j]);
memset(a[(i-1)%2],0,sizeof(a[(i-1)%2]));
}
i=1;
while (a[n%2][0][i]==0) i++;
a[n%2][0][i]-=1;
for (i=a[n%2][0][0];i>=1;i--)
{
if (i==a[n%2][0][0])
{printf("%d",a[n%2][0][i]); continue;}
if (a[n%2][0][i]<10) printf("00000000%d",a[n%2][0][i]);
else if (a[n%2][0][i]<100) printf("0000000%d",a[n%2][0][i]);
else if (a[n%2][0][i]<1000) printf("000000%d",a[n%2][0][i]);
else if (a[n%2][0][i]<10000) printf("%00000d",a[n%2][0][i]);
else if (a[n%2][0][i]<100000) printf("%0000d",a[n%2][0][i]);
else if (a[n%2][0][i]<1000000) printf("%000d",a[n%2][0][i]);
else if (a[n%2][0][i]<10000000) printf("%00d",a[n%2][0][i]);
else if (a[n%2][0][i]<100000000) printf("%0d",a[n%2][0][i]);
else printf("%d",a[n%2][0][i]);
}
return 0;
}