Cod sursa(job #1583717)

Utilizator hrazvanHarsan Razvan hrazvan Data 29 ianuarie 2016 11:33:05
Problema Cifre Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#define CIF 10
int d[CIF + 1][CIF + 1];

inline void precalc(){
  int i, j;
  d[0][0] = 1;
  for(i = 1; i <= CIF; i++){
    for(j = 0; j <= CIF; j++){
      d[i][j] += (CIF - 1) * d[i - 1][j];
      if(j != 0)
        d[i][j] += d[i - 1][j - 1];
    }
  }
}

inline int solve(int x, int c, int k){
  int p = 1, n = 0, s = 0, rez = 0;
  while(p <= x / 10){
    p *= 10;
    n++;
  }
  for(; n >= 0; n--){
    if(c < x / p)
      rez += x / p * d[n][k - s] + d[n][k - s - 1];
    else
      rez += (x / p + 1) * d[n][k - s];
    if(c == x / p)
      s++;
    x %= p;
    p /= 10;
  }
  return rez;
}

int main(){
  precalc();
  FILE *in = fopen("cifre.in", "r");
  int a, b, c, k;
  fscanf(in, "%d%d%d%d", &a, &b, &c, &k);
  a--;
  int rez = solve(b, c, k) - solve(a, c, k);
  FILE *out = fopen("cifre.out", "w");
  fprintf(out, "%.4lf", 1.0 * rez / (b - a));
  fclose(out);
  return 0;
}