Un’aiutino per risolvere il problema (https://training.olinfo.it/#/task/ois_bloomsday/statement) entro il tempo limite?
Questo é il codice più o meno…
Probabilmente c’è qualche relazione tra i numeri che aumentano con una progressone definita non saprei…
O magari si sa ogni quanti numeri appaiono i numeri composti da nCifre+1 cifre… non so la butto li…
Dubito si possa risolvere in O(1) (almeno spero non si possa )
Credo che invece O(N) sia fattibile (?)
In ogni caso facendolo cosi il problema é il metodo lunghezza e pow…
in quanto lunghezza dato il numero generato restituisce il numero di cifre , la “lunghezza”
pow invece , la potenza suppongo sia un for di moltiplicazioni…
cin >> K >> E >> N;
int salti = lunghezza(K);
int pos = 1;
for(;salti<N;pos++){
salti += lunghezza(K*pow(pos,E));
}
cout << pos-1;
Oltretutto… i primi quattro output li sbaglia , mentre i restati li fa giusti se non per il tempo dove non posso dire cosa fa…
Ho provato a cambiare il metodo lunghezza in varii modi tra i quali :
int lunghezza(long long numero) return (int) log10((double) numero) + 1;
int lunghezza(long long numero){
int cifre = 0;
while (numero) {
numero/= 10;
cifre ++;
}
return cifre ;
}
e …
int lunghezza(long long x){
return (x < 10 ? 1 :
(x < 100 ? 2 :
(x < 1000 ? 3 :
(x < 10000 ? 4 :
(x < 100000 ? 5 :
(x < 1000000 ? 6 :
(x < 10000000 ? 7 :
(x < 100000000 ? 8 :
(x < 1000000000 ? 9 :
10)))))))));
}
Ma non é cosi che che va risolto…
Poi ho pensato , andando avanti posso trovare numeri lunghi tanto quanto il numero preso in precedenza , o più grandi di una cifra… quindi ho provato a modificare il metodo lunghezza anche tenendo conto di questo , ma nulla da fare
A sto punto credo il problema sia su quel pow dei poveri e che ci sia una relazione tra la progressione dei numeri…
Aiutino plz
Cercate di “farmici arrivare” grazie