Pagini recente » Cod sursa (job #1811959) | Cod sursa (job #2923288) | Cod sursa (job #60983) | Cod sursa (job #3137267) | Cod sursa (job #1221580)
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
ifstream is("diviz.in");
ofstream os("diviz.out");
#define MOD 30103
int K,A,B,N,x;
int Ap[10][201], D[2][201][101], pre[201][10];
string X,Nr;
int main()
{
is >> K >> A >> B;
Nr = "0";
is >> X;
Nr += X;
N = X.length();
for ( int i = 0; i <= N; ++i )
for ( int j = i+1; j <= N; ++j )
{
x = Nr[j] - '0';
if ( Ap[x][i+1] == 0)
Ap[x][i+1] = j;
}
int Sol(0);
for ( int i = 1; i <= 9; ++i )
{
if ( Ap[i][1] != 0 )
D[1][Ap[i][1]][i%K] = 1;
}
for (int i = 0 ; i <= K ; ++ i)
for (int j = 0 ; j < 10 ; ++ j)
pre[i][j] = (i * 10 + j) % K;
int f;
for ( int i = 1, l = 1; i <= B; ++i, l = 1-l )
{
for ( int j = i; j <= N; ++j )
{
if ( i >= A )
Sol += D[l][j][0];
if ( Sol >= MOD )
Sol %= MOD;
for ( int k = 0; k <= K; ++k )
{
if ( D[l][j][k] != 0)
for ( int p = 0; p <= 9; ++ p)
{
if ( Ap[p][j+1] != 0)
{
D[1-l][Ap[p][j+1]][pre[k][p]] += D[l][j][k];
if ( D[1-l][Ap[p][j+1]][pre[k][p]] >= MOD)
D[1-l][Ap[p][j+1]][pre[k][p]] -= MOD;
}
}
}
}
memset(D[l],0,sizeof(D[l]));
}
os << Sol;
is.close();
os.close();
}