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 }

 

你可能感兴趣的:(poj)