Cod sursa(job #1108177)

Utilizator s1mpMihai Alexandru s1mp Data 15 februarie 2014 14:29:10
Problema Cifre Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("cifre.in");
ofstream g("cifre.out");

long long A;
long long B;
long long C;
long long K;
long long p, nCF;

int numarCifre( int X ) {
	int i = 0;
	while ( X > 0 ) {
		if ( X % 10 == C ) {
			i ++;
		}
		X /= 10;
	}
	return i;
}

void CazuriFavorabile() {
	if ( B - A >= 10000 ) {
		while ( A % 10000 ) {
			if ( numarCifre( A ) >= K ) {
				nCF ++;
			}
			A ++;
		}
		for ( ; B - A >= 10000; A += 10000 ) {
			int X = numarCifre( A / 10000 );
			if ( X >= K ) {
				nCF += 6561;
			}
			if ( X >= K - 1 ) {
				nCF += 2916;
			}
			if ( X >= K - 2 ) {
				nCF += 487;
			}
			if ( X >= K - 3 ) {
				nCF += 35;
			}
			if ( X >= K - 4 ) {
				nCF ++;
			}
		}
	}
	for ( ; A <= B; A ++ ) {
		if ( numarCifre(A) >= K ) {
			nCF ++;
		}
	}
}

void CazuriPosibile() {
	p = B - A + 1;
}

int main() {
	f >> A;
	f >> B;
	f >> C;
	f >> K;
	CazuriPosibile();
	CazuriFavorabile();
	g << (double) nCF/p;
	return 0;
}