Pagini recente » Cod sursa (job #242939) | Cod sursa (job #865471)
Cod sursa(job #865471)
#include <fstream>
#include <cstdio>
#include <cstring>
#define i64 long long
using namespace std;
ifstream cin("cifre.in");
ofstream cout("cifre.out");
int A, B, C, K;
char a[16], b[16];
int dA, dB;
int go(int k,int cc,int val) {
if(val > B) return 0;
int ret = (cc >= K && A <= val);
if(k == dB) {
return ret;
}
for(int c = (k == 0);c < 10;c++) {
ret += go(k + 1,cc + (c == C),val*10 + c);
}
return ret;
}
double brute(int a,int b,int c,int k) {
int ret = 0;
for(int i = a;i <= b;i++) {
int cc = 0;
for(int aux = i;aux > 0;) {
cc += (aux%10 == c);
aux /= 10;
}
if(cc >= k) {
ret++;
}
}
return 1.0*ret/(b - a + 1);
}
double solve() {
int ret = 0;
sprintf(a,"%d",A);
sprintf(b,"%d",B);
dA = strlen(a);
dB = strlen(b);
ret = go(0,0,0);
return 1.0*ret/(B - A + 1);
}
int main()
{
cin>>A>>B>>C>>K;
cout.precision(4);
cout<<fixed<<solve();
return 0;
}