码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1007

时间:2015-05-14 12:15:04      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:java   poj   

DNA Sorting
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 88227   Accepted: 35442

Description

One measure of ``unsortedness‘‘ in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC‘‘, this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG‘‘ has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM‘‘ has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted). 

You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness‘‘, from ``most sorted‘‘ to ``least sorted‘‘. All the strings are of the same length. 

Input

The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.

Output

Output the list of input strings, arranged from ``most sorted‘‘ to ``least sorted‘‘. Since two strings can be equally sorted, then output them according to the orginal order.

Sample Input

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

Sample Output

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA

TTTGGCCAAA

import java.util.Scanner;

public class Poj1007 {

	private static DNA[] ret;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();

		ret = new DNA[m];

		for (int i = 0; i < m; i++) {
			DNA dna = new DNA();
			dna.value = sc.next();
			dna.sortNum = calSortNum(dna.value);
			// ret[i] = dna;
			addToArray(dna);
		}

		for (int i = 0; i < m; i++) {
			System.out.println(ret[i].value);
		}
	}

	// 计算排序值
	private static int calSortNum(String str) {

		if (str.length() == 1) {
			return 0;
		}

		int sortF = 0;
		char c = str.charAt(0);
		for (int i = 1; i < str.length(); i++) {
			if (c > str.charAt(i)) {
				sortF++;
			}
		}
		return sortF + calSortNum(str.substring(1));
	}

	//插入排序
	private static void addToArray(DNA dna) {
		for (int i = 0; i < ret.length; i++) {
			if (ret[i] != null) {
				if (dna.sortNum < ret[i].sortNum) {
					// 开始移动
					for (int j = ret.length - 1; j > i; j--) {
						ret[j] = ret[j - 1];
					}
					ret[i] = dna;
					break;

				}
			} else {
				ret[i] = dna;
				break;
			}

		}
	}

	//构造一个DNA类,它有两个属性,一个是它的内容字符串,一个是它的排序值
	private static class DNA {
		String value;
		int sortNum;
	}

}


POJ 1007

标签:java   poj   

原文地址:http://blog.csdn.net/bear_huangzhen/article/details/45716777

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!