# Due output sbagliati in ANCIENT TEXT

**URL:** <https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730>\
**Category:** Aiuto\
**Created:** [5 Febbraio 2024, 3:36pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730 "2024-02-05T15:36:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![andreamanzo](https://forum.olinfo.it/user_avatar/forum.olinfo.it/andreamanzo/32/1985_2.png) [@andreamanzo](https://forum.olinfo.it/u/andreamanzo)\
**Post date:** [5 Febbraio 2024, 3:36pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730/1 "2024-02-05T15:36:50Z")

</div>

Ciao, stavo risolvendo ancient text, ma purtroppo non riesco a ottenere 100/100 in quanto due soli output (uno nella subtask 4 e uno nella 6) risultano sbagliati…  
Non riesco a capire se c’è un piccolo errore nel mio codice, un caso particolare che non ho considerato o qualcos’altro.  
Condivido il mio codice:

```auto
#include <bits/stdc++.h>

using namespace std;

// input data
int N, K;
vector<string> S;

int main() {

    ios::sync_with_stdio(false);
    cin >> N >> K;
    S.resize(N);
    for (int i = 0; i < N; i++)
        cin >> S[i];

    // insert your code here
    vector<string>mostFrequentChar(K, "");

    for (int k=0; k<K; k++) {
        const int lettere = 26;
        vector<int>charOccurence(lettere, 0);
        for (int i=0; i<N; i++) {
            charOccurence[(int)(S[i][k] - 'a')] ++;
        }
        int maxx = 0;
        for (int i=0; i<lettere; i++) {
            if (charOccurence[i] > maxx) {
                maxx = charOccurence[i];
            }
        }
        vector<int>massimi;
        for (int i=0; i<lettere; i++) {
            if (charOccurence[i] == maxx) {
                massimi.push_back(i);
            }
        }
        for (int i=0; i<massimi.size(); i++) {
            mostFrequentChar[k] += (char)(massimi[i] + 'a');
        }
    }

    int massimo = -1;
    int indice = -1;
    for (int i = 0; i<N; i++) {
        int conta = 0;
        for (int k=0; k<K; k++) {
            if (mostFrequentChar[k].find(S[i][k]) != string::npos) {
                conta ++;
            }
        }
        if (conta > massimo) {
            massimo = conta;
            indice = i;
        }
    }

    cout << indice << endl; // print the result
    return 0;
}

```

in pratica quello che faccio è:

-Calcolo dei caratteri più frequenti per colonna: Per ogni colonna k, il codice conta le occorrenze di ogni lettera tra tutte le stringhe. Poi, trova il massimo numero di occorrenze (maxx) per quella colonna. Il codice identifica tutti i caratteri che condividono il massimo numero di occorrenze e li aggiunge tutti alla stringa mostFrequentChar[k].

-Ricerca della stringa con più corrispondenze: Il codice quindi scorre tutte le stringhe e conta, per ciascuna stringa, quante volte un carattere in una data posizione corrisponde a uno dei caratteri più frequenti per quella posizione. L’indice della stringa con il maggior numero di corrispondenze viene memorizzato in indice.

Grazie in anticipo 🙏

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [5 Febbraio 2024, 6:13pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730/2 "2024-02-05T18:13:46Z")

</div>

Prova con questo input:  
10 3  
axy  
amh  
fbc  
bdc  
bde  
nsk  
rok  
usl  
wjk  
akw

Sicuro che basti far conto sul carattere/i più frequente sulle varie colonne?  
Magari nessun carattere della stringa migliore è quello più frequente, o non ne ha la maggior quantità.

---

<div class="post-metadata">

**Author:** ![andreamanzo](https://forum.olinfo.it/user_avatar/forum.olinfo.it/andreamanzo/32/1985_2.png) [@andreamanzo](https://forum.olinfo.it/u/andreamanzo)\
**Post date:** [5 Febbraio 2024, 8:27pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730/3 "2024-02-05T20:27:26Z")

</div>

Effettivamente è così, anche se spesso le due soluzioni coincidono…  
Posso “correggere” la mia idea o secondo te è meglio cambiare completamente approccio?

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [5 Febbraio 2024, 9:24pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730/4 "2024-02-05T21:24:54Z")

</div>

Puoi anche non rifare tutto: per ogni colonna calcoli la frequenza di tutti i 26 caratteri, poi per ogni stringa per singola colonna trovi (rapidamente) quante sono le differenze, le sommi … e la parte finale è di nuovo simile alla tua.

---

<div class="post-metadata">

**Author:** ![andreamanzo](https://forum.olinfo.it/user_avatar/forum.olinfo.it/andreamanzo/32/1985_2.png) [@andreamanzo](https://forum.olinfo.it/u/andreamanzo)\
**Post date:** [5 Febbraio 2024, 10:17pm UTC](https://forum.olinfo.it/t/due-output-sbagliati-in-ancient-text/8730/5 "2024-02-05T22:17:11Z")

</div>

grazie sono riuscito a fare 100/100. Effettivamente era anche più semplice di quello che stavo facendo io 😅
