一種排序時間限制:3000 ms | 記憶體限制:65535 KB難度:3
-
描述
-
現在有很多長方形,每一個長方形都有一個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(預設定序都是從小到大);
1.按照編號從小到大排序
2.對於編號相等的長方形,按照長方形的長排序;
3.如果編號和長都相同,按照長方形的寬排序;
4.如果編號、長、寬都相同,就只保留一個長方形用於排序,刪除多餘的長方形;最後排好序按照指定格式顯示所有的長方形;
-
輸入
-
第一行有一個整數 0<n<10000,表示接下來有n組測試資料;
每一組第一行有一個整數 0<m<1000,表示有m個長方形;
接下來的m行,每一行有三個數 ,第一個數表示長方形的編號,
第二個和第三個數值大的表示長,數值小的表示寬,相等
說明這是一個正方形(資料約定長寬與編號都小於10000);
-
輸出
-
順序輸出每組資料的所有合格長方形的 編號 長 寬
-
範例輸入
-
181 1 11 1 11 1 21 2 11 2 22 1 12 1 22 2 1
-
範例輸出
-
1 1 11 2 11 2 22 1 12 2 1
import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;public class NY_8 {public static void main(String[] args) {Scanner input = new Scanner(System.in);int n=input.nextInt();int a,b,c;while(n-->0){int m=input.nextInt();Rt [] arr=new Rt [m];for(int i=0; i<m; i++){Rt r=new Rt();r.no=input.nextInt();a = input.nextInt();b = input.nextInt();r.length=Math.max(a, b);r.width=a+b-r.length;arr[i]=r;}Arrays.sort(arr, new RtCom());System.out.println(arr[0].no+" "+arr[0].length+" "+arr[0].width);a=arr[0].no;b=arr[0].length;c=arr[0].width;for(int i=1; i<arr.length; i++){if(a==arr[i].no && b==arr[i].length && c==arr[i].width){continue;}else{System.out.println(arr[i].no+" "+arr[i].length+" "+arr[i].width);a=arr[i].no;b=arr[i].length;c=arr[i].width;}}}}}class RtCom implements Comparator{public int compare(Rt r1,Rt r2){if(r1.no != r2.no){return r1.no>r2.no?1:-1;}else if(r1.length != r2.length &&r1.no == r2.no){return r1.length>r2.length?1:-1;}else{return r1.width>r2.width?1:-1;}}@Overridepublic int compare(Object o1, Object o2) {// TODO Auto-generated method stubreturn 0;}}class Rt{int no,length,width;}