4269. 校庆
20192019 年浙江大学将要庆祝成立 122122 周年。
为了准备校庆,校友会收集了所有校友的身份证号。
现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。
输入格式
输入在第一行给出正整数 NN。
随后 NN 行,每行给出一位校友的身份证号(1818 位由数字和大写字母 XX 组成的字符串)。题目保证身份证号不重复。
随后给出前来参加校庆的所有人士的信息:
首先是一个正整数 MM。
随后 MM 行,每行给出一位人士的身份证号。题目保证身份证号不重复。
输出格式
首先在第一行输出参加校庆的校友的人数。
然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7−147−14 位给出的是 yyyymmdd
格式的生日。
如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。
数据范围
1≤N,M≤1051≤N,M≤105
输入样例:
5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042
输出样例:
3
150702193604190912
题解(暴力超时):
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
//输入n
int n = scanner.nextInt();
String arr[] = new String[n];
while(n --> 0) {
arr[n] = scanner.next();
}
int m =scanner.nextInt();
String arr1[] = new String[m];
while (m-- > 0){
arr1[m] = scanner.next();
}
//存放如果没有校友,嘉宾年龄
TreeMap<Integer,String> map1 = new TreeMap<>();
//找到参加校庆的校友
TreeMap<Integer,String> map = new TreeMap<>();
//计算参加的人数
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr1.length; j++) {
int age = Integer.parseInt(arr[i].substring(6,14));
if (arr[i].equals(arr1[j])){
count++;
map.put(age,arr[i]);
break;
}
map1.put(age,arr[i]);
}
}
System.out.println(count);
if (count > 0) System.out.println(map.get(map.firstKey()));
else System.out.println(map1.get(map1.firstKey()));
}
}
全新写法版本(直接比较出最大生日)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
HashSet<String> set = new HashSet<>();
String resX = "999999999999999999";
String resY = "999999999999999999";
int n = scanner.nextInt();
while (n --> 0){
String id = scanner.next();
set.add(id);
}
//判断来了多少校友
int count = 0;
int m = scanner.nextInt();
while (m --> 0){
String id = scanner.next();
//如果存在校友嘉宾,才会替换resX
if (set.contains(id)) {
count++;
//找到年龄最大的身份证号码
if (resX.substring(6,14).compareTo(id.substring(6,14)) > 0){
resX = id;
}
}
//直接找出来宾年龄最大身份证号
if (resY.substring(6,14).compareTo(id.substring(6,14)) > 0){
resY = id;
}
}
System.out.println(count);
if (resX.equals("999999999999999999")) System.out.println(resY);
else System.out.println(resX);
}
}
评论区