DNA Consensus String
think: 首先理解题目大意,有n行m列字符,要寻找一串字符,使得对于所有字符来说差异最小,还要计算差异的个数。
#include <bits/stdc++.h> #include <math.h> using namespace std; char s[1211][1211];//存储字符 char p[1212];//找到的差异最小的字符串 int a[12111][12111];//选找p int main() { int T, n, m; cin>>T; while(T--) { cin>>n>>m; getchar(); memset(a, 0, sizeof(a)); memset(p, 0, sizeof(p)); memset(s, 0, sizeof(s)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cin>>s[i][j]; a[(int)s[i][j]][j]++;//第几列的字符有几个 } } for(int i=0;i<m;i++) { int max = 0; char o; for(int k='A';k<='Z';k++) { if(a[k][i]>max) { o = (char)k; max = a[k][i]; } } p[i] = o; } cout<<p<<endl;//输出p int sum = 0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(s[i][j]==p[j]); else sum++; } } cout<<sum<<endl;//个数 } return 0; }