Sto provando a risolvere il problema cabala ma non riesco in nessun modo a completare l’ultimo subtask. Questo è il mio codice:
long long check(long long n) {
std::string str = std::to_string(n);
for (int i = 1; i < str.size(); i++) {
if (str[i] == str[i - 1]) return -1;
}
return n;
}
long long ex(int N, long long n, int it, long long max, int M) {
long long num = check(n);
if (num == -1) return max;
if (num % M > max % M) max = num;
if (it == N) return max;
long long n1 = ex(N, n * 10 + 3, it + 1, max, M);
long long n2 = ex(N, n * 10 + 6, it + 1, max, M);
long long n3 = ex(N, n * 10 + 9, it + 1, max, M);
if (n1 % M > max % M) max = n1;
if (n2 % M > max % M) max = n2;
if (n3 % M > max % M) max = n3;
return max;
}
long long occulta(int N, int M) {
long long max = ex(N, 3, 1, 0, M);
long long n1 = ex(N, 6, 1, 0, M);
long long n2 = ex(N, 9, 1, 0, M);
if (n1 % M > max % M) max = n1;
if (n2 % M > max % M) max = n2;
return max % M;
}
int main() {
FILE *fr, *fw;
int T, N, M, i;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(1 == fscanf(fr, "%d", &T));
for (i=0; i<T; i++) {
assert(2 == fscanf(fr, "%d %d", &N, &M));
fprintf(fw, "%lld ", occulta(N, M));
}
fprintf(fw, "\n");
fclose(fr);
fclose(fw);
return 0;
}
Qualcuno ha qualche idea per ottimizzarlo?