Cod sursa(job #7117)
#include <stdio.h>
#include <string.h>
#define MaxN 63
#define MOD 30103
int K, A, B;
long long bits, N;
char nr[MaxN];
bool found[(1<<30)];
int nrsol;
int main()
{
FILE *fin = fopen("diviz.in", "rt");
FILE *fout = fopen("diviz.out", "wt");
fscanf(fin, "%d %d %d\n%s", &K, &A, &B, &nr);
fclose(fin);
for (long long i = 1; i < (1 << strlen(nr)); i++)
{
long long Nr = 0, digits = 0, firstbit = 0;
for (int bit = 0; bit < strlen(nr); bit++)
if (i & (1 << bit))
{
if (firstbit == 0 && nr[bit] == '0') { digits = -1; break; }
else firstbit = 1;
Nr *= 10;
Nr += nr[bit] - '0';
digits ++;
}
if (digits >= A && digits <= B)
if (Nr % K == 0 && found[Nr] == false)
{
found[Nr] = true;
//fprintf(fout, "%d\n", Nr);
nrsol++;
}
}
fprintf(fout, "%d", nrsol);
fclose(fout);
return 0;
}