Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <assert.h>
- #include <math.h>
- #include <iostream>
- #include <vector>
- #include <limits>
- using namespace std;
- unsigned long long calcolacifra(long long cifra, long long K, long long E){
- cifra--;
- long double a =pow(10,cifra);
- long double b=a/K;
- b=pow(b,1/(long double)E);
- return ceil(b)-1;//usando floor(b) mi vengono valori sballati
- }
- unsigned long long predict(long long K, long long E, long long N) {
- N--;//La prima cifra รจ alla posizione 0
- unsigned long long sommaCifre=0;
- int cifraCorr=3;
- vector<unsigned long long> xConMinimaCifra;
- unsigned long long rimaste;
- unsigned long long pos;
- xConMinimaCifra.push_back(calcolacifra(1,K,E));
- xConMinimaCifra.push_back(calcolacifra(2,K,E));
- sommaCifre+=xConMinimaCifra[1]-xConMinimaCifra[0];
- while(sommaCifre<N){
- xConMinimaCifra.push_back(calcolacifra(cifraCorr,K,E));
- sommaCifre+=(cifraCorr-1) *(xConMinimaCifra[cifraCorr-1]-xConMinimaCifra[cifraCorr-2]);
- cifraCorr++;
- }
- //Ora ho superato N, devo "tornare indietro"
- cifraCorr--;
- sommaCifre-=(cifraCorr-1) *(xConMinimaCifra[cifraCorr-1]-xConMinimaCifra[cifraCorr-2]);
- rimaste = N-sommaCifre;//Numero di cifre rimaste
- pos = rimaste/(cifraCorr-1)+1;
- pos+=xConMinimaCifra[cifraCorr-2];
- return pos;
- }
- int main() {
- FILE *fr, *fw;
- long long K, E, N;
- fr = fopen("input.txt", "r");
- fw = fopen("output.txt", "w");
- assert(3 == fscanf(fr, "%lld %lld %lld", &K, &E, &N));
- fprintf(fw, "%lld\n", predict(K, E, N));
- fclose(fr);
- fclose(fw);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement