这是连续第8次1Y了,哈哈哈,不过,不过这题看起来挺吓人,读完才知道就是让球一个目标DNA序列,和每个所给序列最相近。不是从里面选,第一次就是这么理解的然后。。。。。是自己用A C G T中组合。如果有多解选字典序最小的。
题目定位 : 字符串水题。 貌似有点贪心的意思。
上Java代码 :
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
while(t-- > 0) {
int m = scan.nextInt();
int n = scan.nextInt();
StringBuilder sb = new StringBuilder();
String s;
DNA[] dna = new DNA[m + 1];
for(int i=0; i<m; i++) {
s = scan.next();
dna[i] = new DNA(s, 0);
}
int[] cnt = new int[4];
int dis = 0;
for(int j=0; j<n; j++) {
Arrays.fill(cnt, 0);
for(int i=0; i<m; i++) {
if(dna[i].str.charAt(j) == 'A') {
cnt[0] ++;
}
if(dna[i].str.charAt(j) == 'C') {
cnt[1] ++;
}
if(dna[i].str.charAt(j) == 'G') {
cnt[2] ++;
}
if(dna[i].str.charAt(j) == 'T') {
cnt[3] ++;
}
}
int max = cnt[0];
char ch = 'A';
for(int k=1; k<4; k++) {
if(cnt[k] > max) {
max = cnt[k];
if(k == 1) {
ch = 'C';
}
if(k == 2) {
ch = 'G';
}
if(k == 3) {
ch = 'T';
}
}
}
if(ch == 'A') {
dis += cnt[1] + cnt[2] + cnt[3];
}
if(ch == 'C') {
dis += cnt[0] + cnt[2] + cnt[3];
}
if(ch == 'G') {
dis += cnt[0] + cnt[1] + cnt[3];
}
if(ch == 'T') {
dis += cnt[1] + cnt[2] + cnt[0];
}
sb.append(ch);
}
System.out.println(sb);
System.out.println(dis);
}
}
}
class DNA {
public String str;
public int cnt;
public DNA(String str, int cnt) {
this.str = new String(str);
this.cnt = cnt;
}
}