NYOJ 8 一种排序(comparator排序)

一种排序

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 3
 
描述
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

1.按照编号从小到大排序

2.对于编号相等的长方形,按照长方形的长排序;

3.如果编号和长都相同,按照长方形的宽排序;

4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;
 
输入
第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,

第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000);
输出
顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
样例输入
1
8
1 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
样例输出
1 1 1
1 2 1
1 2 2
2 1 1
2 2 1
来源
经典题目
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Main{//张燚	一种排序	Accepted	 151	 2776	java	08-06 21:56:07 nyoj
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		while(N-->0){
			int n=input.nextInt();
			TreeSet ts=new TreeSet(new SORT());
			for(int i=0;i<n;i++){
				int a=input.nextInt();
				int b=input.nextInt();
				int c=input.nextInt();
				if(b<c){
					int d=b;
					b=c;
					c=d;
				}
				F f=new F(a,b,c);
				ts.add(f);
			}
			Iterator it=ts.iterator();
			F f[]=new F[n+1];
			int e=-1;
			while(it.hasNext()){
				F r=(F)it.next();
				if(e==-1){
					f[++e]=r;
				}
				else if(!(r.bianhao==f[e].bianhao&&r.c==f[e].c&&r.k==f[e].k)){
					f[++e]=r;
				}
			}
			for(int i=0;i<=e;i++){
				System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
			}
		}
	}

	
}
class SORT implements Comparator<F>{

	@Override
	public int compare(F o1, F o2) {
		if(o1.bianhao>o2.bianhao)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
			return 1;
		else
			return -1;
	}
	
}
class F{
	int bianhao,c,k;
	F(int bianhao,int c,int k){
		this.bianhao=bianhao;
		this.c=c;
		this.k=k;
	}
	F(){}
}


import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main{//一种排序	Accepted	 215MS	 2771	java	2013-08-07 09:41:06
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		while(N-->0){
			int n=input.nextInt();
			F f[]=new F[n];
			for(int i=0;i<n;i++){
				int a=input.nextInt();
				int b=input.nextInt();
				int c=input.nextInt();
				if(b<c){
					int d=b;
					b=c;
					c=d;
				}
				f[i]=new F(a,b,c);
			}
			Arrays.sort(f,new SORT());
			for(int i=0;i<n;i++){
				if(i==0)
					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
				else if(!(f[i].bianhao==f[i-1].bianhao&&f[i].c==f[i-1].c&&f[i].k==f[i-1].k)){
					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
				}
			}
		}
	}

	
}
class SORT implements Comparator<F>{

	@Override
	public int compare(F o1, F o2) {
		if(o1.bianhao>o2.bianhao)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
			return 1;
		else
			return -1;
	}
	
}
class F{
	int bianhao,c,k;
	F(int bianhao,int c,int k){
		this.bianhao=bianhao;
		this.c=c;
		this.k=k;
	}
	F(){}
}


 import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main{//一种排序	Accepted	 313MS	 2771	java	2013-08-07 09:57:57
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		while(N-->0){
			int n=input.nextInt();
			F f[]=new F[n];
			for(int i=0;i<n;i++){
				int a=input.nextInt();
				int b=input.nextInt();
				int c=input.nextInt();
				if(b<c){
					int d=b;
					b=c;
					c=d;
				}
				f[i]=new F(a,b,c);
			}
			Arrays.sort(f,new Comparator<F>(){
				@Override
				public int compare(F o1, F o2) {
					if(o1.bianhao>o2.bianhao)
						return 1;
					else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
						return 1;
					else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
						return 1;
					else
						return -1;
				}
			});
			for(int i=0;i<n;i++){
				if(i==0)
					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
				else if(!(f[i].bianhao==f[i-1].bianhao&&f[i].c==f[i-1].c&&f[i].k==f[i-1].k)){
					System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
				}
			}
		}
	}

	
}
class F{
	int bianhao,c,k;
	F(int bianhao,int c,int k){
		this.bianhao=bianhao;
		this.c=c;
		this.k=k;
	}
	F(){}
}


原文地址:https://www.cnblogs.com/pangblog/p/3243723.html