Cod sursa(job #1962920)

Utilizator Bodo171Bogdan Pop Bodo171 Data 12 aprilie 2017 10:07:08
Problema Diviz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
using namespace std;
string s;
const int mod=30103;
int modes[2][205][105],lst[205][10],v[205];
int i,j,ind,idx,k,a,b,n,use,wh,tot;
int main()
{
    ifstream f("diviz.in");
    ofstream g("diviz.out");
    f>>k>>a>>b;
    f>>s;
    for(i=0;i<s.size();i++)
    {
        v[i+1]=s[i]-'0';
        for(j=0;j<10;j++)
            if(!lst[i+1][j])
             lst[i+1][j]=lst[i][j];
        lst[i+2][s[i]-'0']=i+1;
    }//indexare de la 1
    n=s.size();
    for(j=0;j<10;j++)
       if(!lst[n+1][j])
        lst[n+1][j]=lst[i-1][j];
    for(i=1;i<=n;i++)
      if(v[i]!=0)
        {
            modes[1][i][v[i]%k]=1;
            if(a==1&&v[i]%k==0) tot++;
        }
    for(i=2;i<=b;i++)
    {
        use=i%2;
        for(j=1;j<=n;j++)
        {
         for(idx=0;idx<k;idx++)
           modes[use][j][idx]=0;
           for(ind=0;ind<10;ind++)
              if(lst[j][ind])
              {
                 for(idx=0;idx<k;idx++)
                    if(modes[1-use][lst[j][ind]][idx])
                 {
                     wh=(idx*10+v[j])%k;
                     modes[use][j][wh]+=modes[1-use][lst[j][ind]][idx];
                     if(modes[use][j][wh]>=mod)
                        modes[use][j][wh]-=mod;
                 }
              }
        }
        if(i>=a)
        {
            for(j=0;j<10;j++)
            {
                tot+=modes[use][lst[n+1][j]][0];
                 if(tot>=mod)
                    tot-=mod;
            }
        }
    }
    g<<tot;
    return 0;
}