Pagini recente » Cod sursa (job #2407000) | Cod sursa (job #2710699) | Cod sursa (job #450515) | Cod sursa (job #684690) | Cod sursa (job #2710711)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cifre.in");
ofstream fout("cifre.out");
int A, B, C, K, dp[11][11][2];
int f(int x) {
if(x < 0)
return 0;
for(int i = 0; i < 11; ++i)
for(int j = 0; j < 11; ++j)
for(int k = 0; k < 2; ++k)
dp[i][j][k] = 0;
vector<int> a;
while(x) {
a.emplace_back(x % 10);
x /= 10;
}
reverse(a.begin(), a.end());
int N = a.size();
dp[0][0][0] = 1;
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
for(int lower = 0; lower < 2; ++lower) {
int low_lim = 0;
if(i == 0)
low_lim = 1;
for(int c = 0; c < 10; ++c) {
if(!lower && c > a[i])
continue;
int new_j = j;
bool new_lower = lower | (c < a[i]);
if(c == C)
++new_j;
dp[i + 1][new_j][new_lower] += dp[i][j][lower];
}
}
int ans = 0;
for(int i = K; i <= N; ++i)
ans += dp[N][i][0] + dp[N][i][1];
if(C == 0 && K < 2)
++ans;
return ans;
}
int main() {
fin >> A >> B >> C >> K;
fout << fixed << setprecision(4) << (double)(f(B) - f(A - 1)) / (B - A + 1) << '\n';
}