DNA Sortingjava
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 94974 | Accepted: 38197 |
Descriptionide
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. ui
Inputthis
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.code
Outputip
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.ci
Sample Inputget
10 6 AACATGAAGG TTTTGGCCAA TTTGGCCAAA GATCAGATTT CCCGGGGGGA ATCGATGCAT
Sample Outputinput
CCCGGGGGGA AACATGAAGG GATCAGATTT ATCGATGCAT TTTTGGCCAA TTTGGCCAAA
Sourcestring
East Central North America 1998
My solution in Java:
要點:
泛型的用法
Arrays.sort()的用法
import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); final int len = cin.nextInt(); final int n = cin.nextInt(); cin.nextLine(); List<Dna> list = new ArrayList<Dna>(n); for (int i = 0; i < n; i++) { Dna obj = new Dna(); obj.setDna(cin.nextLine()); obj.setInversion(getInversion(obj.getDna(), len)); list.add(obj); } cin.close(); ComparatorDna comparator = new ComparatorDna(); Collections.sort(list, comparator); for (Dna dna : list) { System.out.println(dna.getDna()); } } static int getInversion(String seq, int len) { int count = 0; int length = len; for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { if (seq.charAt(i) > seq.charAt(j)) { count++; } } } return count; } } class Dna { Integer inversion; public Integer getInversion() { return inversion; } public void setInversion(Integer inversion) { this.inversion = inversion; } String dna; public String getDna() { return dna; } public void setDna(String dna) { this.dna = dna; } } class ComparatorDna implements Comparator<Dna> { @Override public int compare(Dna o1, Dna o2) { return o1.getInversion().compareTo(o2.getInversion()); } }