Cod sursa(job #865471)

Utilizator ELHoriaHoria Cretescu ELHoria Data 26 ianuarie 2013 15:43:59
Problema Cifre Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#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;
}