Ciao, stavo cercando di risolvere il problema Case de lo commune (condomini), ma la mia soluzione non passa alcuni testcase (sebbene ne passino comunque almeno la metà). Ho provato a cercare qualche testcase che non passa a mano, ma non riesco a trovarne. Se qualcuno riuscisse a darmene uno che rompa il mio codice grazie.
La mia idea era semplicemente cercare le case che hanno case più alte sia a destra che a sinistra e trovare l’intervallo maggiore tra due di queste case.
Condivido il mio codice:
int sbugiarda(int N, vector<int> H) {
vector<int> problemi;
problemi.push_back(0);
for (int i = 1; i<N-1; i++) {
if (H[i] <= H[i-1] && H[i] <= H[i+1]) {
problemi.push_back(i);
}
}
problemi.push_back(N-1);
int maxx = -1;
for (int i = 0; i<problemi.size()-1; i++) {
maxx = max(maxx, problemi[i+1] - problemi[i] +1);
}
return maxx;
}
Leggi attentamente il testo.
Comunque, di solito il numero di testcase risolti da una soluzione è un pessimo indicatore di quanto essa sia giusta. È possibile avere soluzioni che sbagliano tutti i casi ma solo per overflow, così come soluzioni rotte che vengono distinte solo da pochi testcase.
Ho riletto il testo più volte perché appunto immaginavo di averlo capito male, ma a sto punto non credo. Da quello che ho capito bisogna cercare il massimo numero di elementi continui che siano più alti di tutti gli elementi alla loro destra o sinistra (o entrambi). Mi dai conferma? Ed è quello che la mia soluzione fa, almeno mi sembra, essendo che in tutti i testcase che provo non sbaglia. Se riuscissi a darmi un input che non funziona poi posso provare a risolvere il problema.
No. Il problema ti chiede di trovare il segmento in cui è presente il massimo numero di palazzi panoramici (se non consideri i palazzi esterni al segmento), indipendentemente dal fatto che lo siano tutti o meno.
Per esempio se il segmento da te scelto contenesse palazzi alti
1 2 4 3 5
la risposta sarebbe 4 perché risulterebbero panoramici i palazzi alti 1, 2, 4 e 5.