Cod sursa(job #1108151)

Utilizator s1mpMihai Alexandru s1mp Data 15 februarie 2014 14:05:19
Problema Cifre Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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 cifre[10];
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 ( int i = 0; i <= 9999; i++ ) {
			cifre[numarCifre(i)] ++;
		}
		for ( ; B - A >= 10000; A += 10000 ) {
			int X = numarCifre( A / 10000 );
			if ( X >= K ) {
				nCF += cifre[0];
			}
			if ( X >= K - 1 ) {
				nCF += cifre[1];
			}
			if ( X >= K - 2 ) {
				nCF += cifre[2];
			}
			if ( X >= K - 3 ) {
				nCF += cifre[3];
			}
			if ( X >= K - 4 ) {
				nCF += cifre[4];
			}
		}
	}
	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;
}