Pagini recente » Cod sursa (job #474476) | Cod sursa (job #2367514) | Monitorul de evaluare | Cod sursa (job #231346) | Cod sursa (job #1460140)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cifre.in");
ofstream fout("cifre.out");
#define rnd(a, b) (a + (rand() % (b-a+1)))
int a, b, c, k;
bool check(int x) {
int cnt = 0;
for(;x;x/=10)
cnt += (x % 10 == c);
return cnt >= k;
}
double Solve1() {
int total = 0;
for(int i=a; i<=b; i++)
total += check(i);
return 1.0 * total / (b - a + 1);
}
double Solve2() {
int it = 500000, cnt, x, total = 0;
for(int i=1; i<=it; i++)
total += check(rnd(a, b));
return 1.0 * total / it;
}
int main() {
srand(time(NULL));
fin >> a >> b >> c >> k;
double rez = (b - a <= 100000) ? Solve1() : Solve2();
fout<<rez;
return 0;
}