//DNA Sorting //对于原文的翻转数目我更喜欢称其为反序列化数 package zhangming.acm; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.Set; import java.util.TreeMap; public class Main1007 { //用来存储经过排序后的字符串对应的反序列化总数及其本身 static Map<Double,String> map = new TreeMap<Double,String>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); @SuppressWarnings("unused") int m = sc.nextInt(); int n = sc.nextInt(); for(int i = 0;i < n;i++) { String s = sc.next(); char[] array = s.toCharArray(); //记录输入的字符串对应的反序列化总数 int counter = 0; //这里的ken是用来扩展反序列化化总数相同的字符处总数 //刚开始没定义这个变量,着实让我浪费了不少时间 int ken = 0; //对输入的字符串进行反序列化总数的统计 for(int k = 0;k < s.length();k++) { if(array[k] != 'A' && array[k]!= 'C' && array[k] != 'G' && array[k] != 'T') continue; for(int t = k + 1;t < s.length();t++) { if(array[t] != 'A' && array[t]!='C' && array[t] != 'G' && array[t] != 'T') continue; else { if(array[k] > array[t]) { counter++; } } } } //下面的count仍是对应的反序列化总数 //但它是用来处理反序列化总数相同的字符串 double count = counter; //对于字符串序列化总数相同的字符处按输入的顺序进行输出 while (map.containsKey(count)) { ken++; count +=1.0/(10*ken); } map.put(count,s); } Set<Map.Entry<Double,String>> set = map.entrySet(); for(Iterator<Map.Entry<Double,String>> iter = set.iterator();iter.hasNext();) { Map.Entry<Double,String> entry = iter.next(); System.out.println(entry.getValue()); } } }