Cod sursa(job #865464)

Utilizator ELHoriaHoria Cretescu ELHoria Data 26 ianuarie 2013 15:28:55
Problema Cifre Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 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 NUM;

void go(int k,int numc,bool isGOE,bool isLOE) {
	if(k >= dA && numc >= K) {
		NUM++;
	}
	if(k == dB) {
		return;
	}
	int ret = 0;
	int Left = (isGOE ? 0 : (a[k] - '0'));
	int Right = (isLOE ? 9 : (b[k] - '0'));
	for(int c = Left;c <= Right;c++) {
		go(k + 1,numc + (c == C),isGOE || c > (a[k] - '0') || k + 1 == dA,isLOE || c < (b[k] - '0'));
	}
}

int main()
{
	cin>>A>>B>>C>>K;
	if(!A) {
		NUM += (C == 0 && K <= 1);
		A++;
	}
	sprintf(a,"%d",A);
	sprintf(b,"%d",B);
	dA = strlen(a);
	dB = strlen(b);
	go(0,0,0,0);
	cout.precision(4);
	double ans = 1.0*NUM/(B - A + 1);
	cout<<ans;
	return 0;
}