Problem Description
临近11.11,C~K看见周围的朋友一个个的都脱单或者正准备脱单了,C~K也想要找一个女朋友了(听说国家会分配?)。MeiK听说了这件事情,表
示C~K终于开悟了,所以他整理了一份候选人名单给C~K。可是C~K心里有自己心动女生的身高区间和年龄限制,所以他想把符合条件的女生
的信息给筛选出来,但是这可是难住了C~K,事关C~K的幸福,你能帮帮他吗?
ps:由于MeiK比较傻,所以名单里可能会有重复的女生的信息,若信息重复,则第一次输入为有效信息。
Input
多组输入。
第一行输入MeiK的候选人名单里有N个人(N<100000)。
第二行输入四个整数a,b,c,d。分别表示C~K心动女生的身高的最小值和最大值,年龄的最小值和最大值。(题目保证a<=b,c<=d)
接下来输入N行,每行表示一个女生的信息(姓名,身高,年龄,联系方式)
ps:联系方式不超过11个字符。
Output
对于每一组输入,第一行输出一个n,表示符合条件的女生的数量。
接下来的n行,每一行输出一个符合条件的女生的信息。
输出顺序按身高从低到高排序,若身高相同,则按年龄从高到底排序,若年龄也相同,则按照输入顺序输出。
Sample Input
4 160 170 20 22 女神1 161 19 11111 女神2 167 20 22222 女神2 167 20 22222 女神3 163 21 33333
Sample Output
2 女神3 163 21 33333 女神2 167 20 22222
代码虽然不是最优的解决方法,但是为练习一下重写compareTo, hashcode和equals方法。
import java.util.*;
public class Main {
public static void main(String[]argc) {
Scanner in = new Scanner(System.in);
HashSet<Godess> hs = new HashSet<Godess>();
int n;
while(in.hasNext()) {
n = in.nextInt();
int hL = in.nextInt();
int hU = in.nextInt();
int aL = in.nextInt();
int aU = in.nextInt();
String name, call;
int height, age;
for(int i = 0; i < n; i++) {
name = in.next();
height = in.nextInt();
age = in.nextInt();
call = in.next();
hs.add(new Godess(name, height, age, call, i));
}
Iterator<Godess> it = hs.iterator();
TreeSet<Godess> ts = new TreeSet<Godess>();
while(it.hasNext()) {
Godess g = it.next();
if(g.height >= hL && g.height <= hU && g.age >= aL && g.age <= aU) {
ts.add(g);
}
}
System.out.println(ts.size());
for(Godess g: ts) {
System.out.println(g);
}
}
in.close();
}
}
class Godess implements Comparable<Godess>{
public String name;
public int height;
public int age;
public String call;
public int x;
public Godess(String name, int height, int age, String call, int x) {
this.name = name;
this.height = height;
this.age = age;
this.call = call;
this.x = x;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object g) {
if(this.hashCode() == g.hashCode()) {
return true;
}
else
{
return false;
}
}
@Override
public String toString() {
return name + " " + height + " " + age +" " + call;
}
public int compareTo(Godess g){
if(this.height != g.height) {
if(this.height > g.height) {
return 1;
}
else {
return -1;
}
}
else
{
if(this.age != g.age) {
if(this.age > g.age) {
return 1;
}
else
{
return -1;
}
}
else {
if(this.x > g.x) {
return 1;
}
else {
return -1;
}
}
}
}
}