现在的位置: 首页 > 综合 > 正文

北大acm1007

2013年08月26日 ⁄ 综合 ⁄ 共 1195字 ⁄ 字号 评论关闭
//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());
		}
	}
}

抱歉!评论已关闭.