Cod sursa(job #1551439)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 15 decembrie 2015 21:14:14
Problema Cifre Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

#define MAX_IT 1000000

using namespace std;

inline int getRandom() {
	static mt19937 gen(time(0));
	int x = gen();
	return x > 0 ? x : -x;
}

int main( void ) {
 FILE *fin, *fout;
 int A, B, dig, freq;
 int tmp, i, currFreq, x, ans;

 fin = fopen( "cifre.in", "r" );
 fscanf( fin, "%d%d%d%d", &A, &B, &dig, &freq );
 fclose( fin );

 fout = fopen( "cifre.out", "w" );
 ans = 0;
 if ( B - A + 1 <= MAX_IT ) {
 for ( i = A; i <= B; i++ ) {
 tmp = i;
 currFreq = 0;
 while ( tmp ) {
 x = tmp / 10;
 currFreq += ( tmp == dig + (x<<1) + (x<<3) );
 tmp = x;
 }
 ans += (freq <= currFreq);
 }
 fprintf( fout, "%.4lf\n", 1.00 * ans / ( B - A + 1 ) );
 } else {
 B = B - A + 1;
 for ( i = 0; i < MAX_IT; i++ ) {
 tmp = getRandom() % B + A;
 currFreq = 0;
 while ( tmp ) {
 x = tmp / 10;
 currFreq += ( tmp == dig + (x<<1) + (x<<3) );
 tmp = x;
 }
 ans += (freq <= currFreq);
 }
 fprintf( fout, "%.4lf\n", 1.00 * ans / MAX_IT );
 }
 fclose( fout );
 return 0;
}