Advertisement
Guest User

Bloomsday 75/100

a guest
Sep 24th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <math.h>
  4. #include <iostream>
  5. #include <vector>
  6. #include <limits>
  7. using namespace std;
  8.  
  9. unsigned long long calcolacifra(long long cifra, long long K, long long E){
  10.     cifra--;
  11.     long double a =pow(10,cifra);
  12.     long double b=a/K;
  13.     b=pow(b,1/(long double)E);
  14.     return ceil(b)-1;//usando floor(b) mi vengono valori sballati
  15. }
  16. unsigned long long predict(long long K, long long E, long long N) {
  17.     N--;//La prima cifra รจ alla posizione 0
  18.     unsigned long long sommaCifre=0;
  19.     int cifraCorr=3;
  20.     vector<unsigned long long> xConMinimaCifra;
  21.  
  22.     unsigned long long rimaste;
  23.     unsigned long long pos;
  24.  
  25.     xConMinimaCifra.push_back(calcolacifra(1,K,E));
  26.     xConMinimaCifra.push_back(calcolacifra(2,K,E));
  27.  
  28.     sommaCifre+=xConMinimaCifra[1]-xConMinimaCifra[0];
  29.  
  30.     while(sommaCifre<N){
  31.         xConMinimaCifra.push_back(calcolacifra(cifraCorr,K,E));
  32.         sommaCifre+=(cifraCorr-1) *(xConMinimaCifra[cifraCorr-1]-xConMinimaCifra[cifraCorr-2]);
  33.         cifraCorr++;
  34.     }
  35.     //Ora ho superato N, devo "tornare indietro"
  36.     cifraCorr--;
  37.     sommaCifre-=(cifraCorr-1) *(xConMinimaCifra[cifraCorr-1]-xConMinimaCifra[cifraCorr-2]);
  38.  
  39.     rimaste = N-sommaCifre;//Numero di cifre rimaste
  40.  
  41.     pos = rimaste/(cifraCorr-1)+1;
  42.     pos+=xConMinimaCifra[cifraCorr-2];
  43.  
  44.     return pos;
  45. }
  46.  
  47. int main() {
  48.     FILE *fr, *fw;
  49.     long long K, E, N;
  50.     fr = fopen("input.txt", "r");
  51.     fw = fopen("output.txt", "w");
  52.     assert(3 == fscanf(fr, "%lld %lld %lld", &K, &E, &N));
  53.     fprintf(fw, "%lld\n", predict(K, E, N));
  54.     fclose(fr);
  55.     fclose(fw);
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement