Pagini recente » Cod sursa (job #2882840) | Cod sursa (job #1531672) | Cod sursa (job #2954791) | Statistici Jasmina Cornestean (JasminaCornestean) | Cod sursa (job #2018564)
#include<fstream>
#include<cstring>
#define MOD 30103
using namespace std;
ifstream fin("diviz.in");
ofstream fout("diviz.out");
int D[2][205][105], n, a, b, k, first[10][205];
int sol = 0;
char s[205];
inline int ok( int L ){
if( a <= L && L <= b )
return 1;
return 0;
}
int main(){
fin >> k >> a >> b;
fin >> s;
n = strlen( s );
n--;
memset( first, -1, sizeof( first ) );
for( int i = 0; i <= 9; i++ ){
for( int j = n; j >= 0; j-- ){
if( s[j] == i + '0' )
first[i][j] = j;
else
first[i][j] = first[i][j + 1];
}
}
for( int i = 1; i <= 9; i++ ){
if( first[i][0] != -1 )
D[0][ first[i][0] ][ i % k ] = 1;
}
for( int L = 1; L <= b; L++ ){
for( int i = 0; i <= n; i++ ){
for( int r = 0; r < k; r++ ){
if( r == 0 )
sol = ( sol + D[0][i][r] * ok( L ) ) % MOD;
if( D[0][i][r] == 0 )
continue;
for( int c = 0; c <= 9; c++ )
if( first[c][i + 1] != -1 && i + 1 <= n )
D[1][ first[c][i + 1] ][ ( r * 10 + c ) % k ] = ( D[1][ first[c][i + 1] ][ ( r * 10 + c ) % k ] + D[0][i][r] ) % MOD;
}
}
memcpy( D[0], D[1], sizeof( D[1] ) );
memset( D[1], 0, sizeof( D[1] ) );
}
fout << sol << "\n";
return 0;
}