Cod sursa(job #7343)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 21 ianuarie 2007 13:29:49
Problema Diviz Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasele 11-12 Marime 0.97 kb
#include <stdio.h>
#include <string>

#define maxn 110
#define baza 30103

int mod,x,y,n,sol;
char v[maxn];
int c[maxn][maxn],d[maxn][maxn];

int main()
{
    freopen("diviz.in","r",stdin);
    freopen("diviz.out","w",stdout);
    
    int i,j,k,aux;
    
	scanf("%d %d %d ",&mod,&x,&y);
	fgets(v,maxn,stdin);
	n=strlen(v)-2;

    c[0][0]=1;
    
	for (i=0;i<=n;i++)
    {
        for (j=0;j<=i;j++)
		  for (k=0;k<mod;k++)
          {
			  d[j][k]=c[j][k];
			  c[j][k]=0;
          }
          
        for (j=0;j<=i;j++)
          for (k=0;k<mod;k++)
          {
              c[j][k]+=d[j][k];
              if (c[j][k]>baza) c[j][k]-=baza;
              aux=(k*10+v[i]-'0')%mod;
              c[j+1][aux]+=d[j][k];
              if (c[j+1][aux]>baza) c[j+1][aux]-=baza;
          }
    }
    
    for (i=x;i<=y;i++) 
    {
        sol+=c[i][0];
        if (sol>baza) sol-=baza;
    }
    
    printf("%d\n",sol);
    
    return 0;
}