Cod sursa(job #1386485)

Utilizator patrutoiuandreipatrutoiu andrei patrutoiuandrei Data 12 martie 2015 23:38:18
Problema Diviz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
int k,p,u,i,j,poz,c,r,ii,b[201][100],a[201][100],n,pp[200][10],v[201],modp[101][10];
char s[201];
int main()
{
    fin>>k>>p>>u;
    fin>>s+1;
    n=strlen(s+1);
    for(i=0;i<=9;i++)
        for(j=0;j<n;j++)
            for(ii=j+1;ii<=n;ii++)
            {
                if(s[ii]-'0'==i)
                {
                    pp[j][i]=ii;
                    break;
                }
            }
        for(c=1;c<=9;c++)
        {
            poz=pp[0][c];
            if(poz)
            {
                a[poz][c%k]++;
            }
            v[1]+=a[poz][0];
        }
    for(r=0;r<k;r++)
        for(c=0;c<=9;c++)
            modp[r][c]=(r*10+c)%k;
    for(i=2;i<=n;i++)
    {
        for(j=i-1;j<n;j++)
        {

            for(c=0;c<=9;c++)
            {
                poz=pp[j][c];
                if(poz)
                {
                    for(r=0;r<k;r++)
                    {
                        if(a[j][r]!=0)
                        {
                            b[poz][modp[r][c]]+=a[j][r];
                            b[poz][modp[r][c]]%=30103;
                            if(modp[r][c]==0)
                                v[i]+=a[j][r];
                                v[i]%=30103;
                        }
                    }
                }
            }
        }
        memcpy(a,b,sizeof(a));
        memset(b,0,sizeof(b));
    }
    int sol=0;

    for(i=p;i<=u;i++)
        sol+=v[i]%30103;
    fout<<sol%30103;
    return 0;
}