Due output sbagliati in ANCIENT TEXT

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:

#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 :pray:

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à.

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

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.

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