#include #include /* 30-Z1-3 * Časová složitost: Lineární se vstupem * Paměťová složitost: Lineární se vstupem */ void vycistit_cetnosti(int *cetnosti) { for (int i = 0; i < 26; i++) { cetnosti[i] = 0; } } int main(void) { int cetnosti[26]; int pocetZprav, delka; scanf("%d %d\n", &pocetZprav, &delka); // Přečteme vstup char **zpravy = malloc(pocetZprav * sizeof(*zpravy)); for (int i = 0; i < pocetZprav; i++) { // Musíme si nechat místo na koncový nulový znak zpravy[i] = malloc((delka + 1) * sizeof(*zpravy[i])); fgets(zpravy[i], delka + 1, stdin); scanf("\n"); } // Pro každou pozici v textu najdeme nejčastější znak for (int i = 0; i < delka; i++) { // Spočítáme pole četností znaků vycistit_cetnosti(cetnosti); for (int m = 0; m < pocetZprav; m++) { int indexZnaku = zpravy[m][i] - 'A'; cetnosti[indexZnaku]++; } // Najdeme maximum int max = 0; char maxZnak = '?'; for (int c = 0; c < 26; c++) { if (cetnosti[c] > max) { max = cetnosti[c]; maxZnak = c + 'A'; if (max > pocetZprav / 2) { // Další znaky nemohou být častější break; } } } printf("%c", maxZnak); } printf("\n"); return 0; }