Subtask 5: tutti i testcase execution timed out.
Subtask 6: tutti i testcase execution timed out.
Subtask 7: tutti i testcase output isn’t correct con tempi bassissimi di esecuzione (0.005s - 256 KiB)
#include <iostream>
#include <cassert>
#include <cmath>
using namespace std;
constexpr int MOD = 10000019;
int N, H;
int main() {
assert(cin >> N);
assert(cin >> H);
long long int inizio, fine, C = 0;
inizio = pow(10, N-1);
fine = pow(10, N)-1;
long long int p = 1, n, i;
for(i=fine; i>=inizio; i--) {
n = i;
while (n != 0)
{
p = p * (n % 10);
n = n / 10;
}
if(p == H)
C++;
p = 1;
}
cout << C % MOD << endl;
return 0;
}
Questo problema non è tanto facile (né particolarmente bello, ma questa è un’altra storia), e sicuramente non voglio spoilerarti la soluzione.
Però è interessante capire a cosa sono dovuti quegli strani output di valutazione. Dovrebbe essere chiaro il motivo degli Execution timed out dei subtask 5 e 6 (quante iterazioni fa il ciclo for?), ma perché mai nel 7, che ha limiti su N ben più alti, il programma dovrebbe terminare dopo una frazione di secondo dando output errato? Cerca di pensare a un motivo per cui questo succede.
L’unica cosa che mi viene in mente per tempi così bassi nella subtask 7 è che il valore con cui inizia il for (fine) è così grande da non entrare proprio nel ciclo ma apparte questo non mi viene in mente niente per poter ottimizzare il codice nelle subtask 5 e 6 potresti darmi qualche suggerimento?
Eh, quasi… Se fine è grande in realtà nel ciclo ci entra eccome. Il problema si ha quando fine < inizio. Secondo te si può verificare questa strana condizione, e se sì, quando?
Non penso si possa verificare il caso che dici tu, in quanto dovresti mettere n < 0, ma non esistono numeri con il numero di cifre negative e se metti solo positivi è impossibile che fine < inizio