首页 > 代码库 > LA 3602 DNA Consensus String
LA 3602 DNA Consensus String
最近审题老是一错再错,Orz
题目中说求一个Hamming值总和最小的字符串,而不是从所给字符中找一个最小的
这样的话,我们逐列处理,所求字符串当前位置的字符应该是该列中出现次数最多其次ASCII值最小的
代码有点挫了,if语句太多了
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 char gene[52][1010], ans[1010]; 8 int num[4]; 9 10 int main(void)11 {12 #ifdef LOCAL13 freopen("3602in.txt", "r", stdin);14 #endif15 16 int T;17 scanf("%d", &T);18 while(T--)19 {20 int n, m, hamming = 0;21 scanf("%d%d", &n ,&m);22 for(int i = 0; i < n; ++i)23 scanf("%s", gene[i]);24 for(int i = 0; i < m; ++i)25 {26 int Max = 0;27 for(int j = 0; j < 4; ++j) num[j] = 0;28 for(int j = 0; j < n; ++j)29 {30 if(gene[j][i] == ‘A‘) ++num[0];31 if(gene[j][i] == ‘C‘) ++num[1];32 if(gene[j][i] == ‘G‘) ++num[2];33 if(gene[j][i] == ‘T‘) ++num[3];34 }35 for(int j = 1; j < 4; ++j)36 if(num[j] > num[Max])37 Max = j;38 if(Max == 0) ans[i] = ‘A‘;39 if(Max == 1) ans[i] = ‘C‘;40 if(Max == 2) ans[i] = ‘G‘;41 if(Max == 3) ans[i] = ‘T‘;42 hamming += num[0] + num[1] + num[2] + num[3] - num[Max];43 }44 ans[m] = ‘\0‘;45 printf("%s\n%d\n", ans, hamming);46 }47 return 0;48 }
LA 3602 DNA Consensus String
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。