2019 年浙江大学将要庆祝成立 122 周年。
为了准备校庆,校友会收集了所有校友的身份证号。
现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。
输入格式
输入在第一行给出正整数 N。
随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母 X 组成的字符串)。题目保证身份证号不重复。
随后给出前来参加校庆的所有人士的信息:
首先是一个正整数 M。
随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。
输出格式
首先在第一行输出参加校庆的校友的人数。
然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7−14 位给出的是 yyyymmdd 格式的生日。
如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。
数据范围
1≤N,M≤105

①字符串匹配,想到了可以用hash,使用C++ STL中的unordered_map来对mp[tmp] ++,mp是unordered_map,tmp是输入的字符串。当输入来参加校庆的信息时,仍然使mp[tmp] ++,如果自增后结果为2,则说明他是校友,并且来参加了校庆。
②统计最年长的校友或参会人员,先获取生日日期,再在输入来参加校庆的人员时进行比较即可。
#include
#include
#include
#include
#include
using namespace std;
string get_brd(string t) {
string ans = "";
for (int i = 6; i <= 13; i++) {
ans += t[i];
}
return ans;
}
int str2bir(string t) {
int ans = 0;
int len = t.length();
for (int i = 0; i < len; i++) {
ans *= 10;
ans += (t[i] - '0');
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
unordered_map<string, int> mp;
int n, m;
cin >> n;
for (int i = 1; i <= n; i++) {
string tmp;
cin >> tmp;
mp[tmp] ++;
}
cin >> m;
int cnt = 0;
string ans, od_in_m;
int cur_bir = 1e9 + 5,cur_m = 1e9 + 5;
for (int i = 1; i <= m; i++) {
string tmp;
cin >> tmp;
mp[tmp] ++;
int m_bir = str2bir(get_brd(tmp));
if (m_bir < cur_m) {
od_in_m = tmp;
cur_m = m_bir;
}
if (mp[tmp] == 2) {
cnt++;
int n_bir = str2bir(get_brd(tmp));
if (n_bir < cur_bir) {
ans = tmp;
cur_bir = n_bir;
}
}
}
cout << cnt << endl;
if (cur_bir != 1e9 + 5) {
cout << ans;
}
else {
cout << od_in_m;
}
return 0;
}