思路:暴力
分析:
1 给定m个长度均为n的DNA序列,求一个DNA使其所有的序列的
Hamming distances最小,如果有多个解输出字典序最小的序列
2 m最大为50,n最大为1000,很明显的暴力题目,没什么解题的方法就是暴力
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N = 100; const int maxn = 1010; const char ch[4] = {'A' , 'C' , 'G' , 'T'}; char str[N][maxn]; //得到下标 int getIndex(char c){ for(int i = 0 ; i < 4 ; i++) if(c == ch[i]) return i; } //得到最大的值的下标 int getMax(int *num){ int pos = 0; for(int i = 1 ; i < 4 ; i++) if(num[i] > num[pos]) pos = i; return pos; } void solve(int m , int n){ int num[4]; int ans = 0; char ansStr[maxn]; memset(ansStr , '\0' , sizeof(ansStr)); for(int i = 0 ; i < n ; i++){ memset(num , 0 , sizeof(num)); for(int j = 0 ; j < m ; j++) num[getIndex(str[j][i])]++; int maxIndex = getMax(num); ansStr[i] = ch[maxIndex]; ans += m-(num[maxIndex]); } printf("%s\n%d\n" , ansStr , ans); } int main(){ int Case , m , n; scanf("%d" , &Case); while(Case--){ scanf("%d%d" , &m , &n); for(int i = 0 ; i < m ; i++) scanf("%s" , str[i]); solve(m , n); } return 0; }
时间: 2025-01-02 18:53:22