2019 年浙江大学将要庆祝成立 122 周年。
为了准备校庆,校友会收集了所有校友的身份证号。
现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。
输入格式
输入在第一行给出正整数 N。
随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母 X 组成的字符串)。题目保证身份证号不重复。
随后给出前来参加校庆的所有人士的信息:
首先是一个正整数 M。
随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。
输出格式
首先在第一行输出参加校庆的校友的人数。
然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7−14 位给出的是 yyyymmdd
格式的生日。
如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。
数据范围
1≤N,M≤10^5
输入样例:
5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042
输出样例:
3
150702193604190912
#include <iostream>
#include <string>
#include <unordered_map> // 这里我们可以直接调用stl里的哈希表
using namespace std;
int n, m;
int res; // 记录一共有多少校友参加
string s,c; // s记录年龄最大的校友 , c记录年龄最大的来宾
string MAX(string a, string b) // 比较a,b的年龄并返回年龄大的那个
{
int A = 0, B = 0; // 用int型存储他们的出生年月日
for (int i = 6; i < 14; i++) // 字符串从下标0开始存储,所以年月日的下标从六开始
{
A = 10 * A + a[i] - '0';
B = 10 * B + b[i] - '0';
}
// 出生年月日越小,年龄越大
if (A > B) return b;
return a;
}
int main()
{
cin >> n;
unordered_map<string, bool> hash; // 创立一个哈希表,索引是string类,存储bool类型,true表示该string类存在
string str;
while (n--)
{
cin >> str;
hash[str] = true;
}
cin >> m;
while (m--)
{
cin >> str;
if (hash[str]) // 如果他是校友
{
if (s.size()) s = MAX(str, s);// 让s记录年龄最大的校友
else s = str; // s记得要给初始值
res++; // 参加校友数量加加
}
else
{
if (c.size()) c = MAX(str, c); // 让c记录年龄最大的来宾
else c = str; // c也要给初始值
}
}
cout << res << endl;
// 判断有无校友参加
if (res) cout << s << endl;
else cout << c << endl;
return 0;
}