#define _CRT_SECURE_NO_WARNINGS #include <cstdio> int main() { int T; int m, n; char dna[55][1005]; // 4 <= m <= 50, 4 <= n <= 1000 scanf("%d", &T); while (T--) { scanf("%d%d", &m, &n); for (int i = 0; i < m; i++) { scanf("%s", dna[i]); } /* for (int i = 0; i < m; i++) { printf("%s\n", dna[i]); } */ char ans[1005]; // 4 <= n <= 1000 int cnt[4]; // count for ‘A‘, ‘C‘, ‘G‘, ‘T‘ in a column int max; char maxChar; // scan each column, select the character which occurs the most time, // if there is a tie, select the lexicographically smaller one for (int j = 0; j < n; j++){ cnt[0] = cnt[1] = cnt[2] = cnt[3] = max = 0; for (int i = 0; i < m; i++){ switch (dna[i][j]){ case ‘A‘: { cnt[0]++; if (cnt[0] > max || (cnt[0] == max && maxChar > ‘A‘)){ max = cnt[0]; maxChar = ‘A‘; } break; } case ‘C‘: { cnt[1]++; if (cnt[1] > max || (cnt[1] == max && maxChar > ‘C‘)){ max = cnt[1]; maxChar = ‘C‘; } break; } case ‘G‘: { cnt[2]++; if (cnt[2] > max || (cnt[2] == max && maxChar > ‘G‘)){ max = cnt[2]; maxChar = ‘G‘; } break; } case ‘T‘: { cnt[3]++; if (cnt[3] > max){ max = cnt[3]; maxChar = ‘T‘; } break; } } } ans[j] = maxChar; } ans[n] = ‘\0‘; printf("%s\n", ans); // count the total Hamming distance int h_dis = 0; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ if (dna[i][j] != ans[j]) h_dis++; } } printf("%d\n", h_dis); } return 0; }
时间: 2024-10-11 04:56:34