POJ 1007
poj1007
题目是求每个输入字符串的逆序对数,并根据逆序对数对字符串进行从小到大的排序,如果逆序对数相同,则按输入顺序排列
很简单,先求逆序对数,再排序就行了
下面为java代码:
1 import java.util.Scanner; 2 import java.util.Comparator; 3 import java.util.Arrays; 4 5 public class Main{ 6 public String string; //字符串 7 public int num; //字符串的逆序对数 8 9 public Main(String str){ //构造函数 10 string = str; 11 getMeasures(); 12 } 13 14 public void getMeasures(){ //求逆序对数函数 15 int result = 0; 16 for(int i=0;i<string.length()-1;i++){ //两重循环 17 for(int j=i+1;j<string.length();j++){ 18 if(string.charAt(i)>string.charAt(j)){ 19 result++; 20 } 21 } 22 } 23 num = result; 24 } 25 public static void main(String[] args){ 26 int n,m; 27 Scanner scan = new Scanner(System.in); 28 n = scan.nextInt(); 29 m = scan.nextInt(); 30 scan.nextLine(); 31 Main[] strings = new Main[m]; //Main类数组 32 for(int i = 0;i<m;i++){ 33 String s = scan.nextLine(); 34 strings[i] = new Main(s); //输入m个字符串,构造m个Main对象 35 } 36 Arrays.sort(strings,new MyComparator()); //对数组进行排序 37 for(int i=0;i<m;i++){ 38 System.out.println(strings[i].string); //打印 39 } 40 } 41 } 42 43 class MyComparator implements Comparator<Main>{ //比较器,按逆序对数目排列 44 public int compare(Main a,Main b){ 45 return a.num - b.num; 46 } 47 }