PAT (Advanced Level) Practice 1157 Anniversary
这道题也不难,但是讲一个我自己需要注意的点:对于求最值的问题,不是总要通过排序来解决,可以在遍历的时候不断地进行比较(首先赋予最大值,或是最小值)。还有对于这道题目,让我疑惑的是,校友年龄最大的,是放在所有的校友范围,还是在仅出席的校友范围里比较得出的。不知道,不明了,不想要…
复习
在STL标准容器中,只有vector、string、deque是可以使用sort的。像set、map这种容器是用红黑树实现的,元素本身有序,故不允许使用sort排序。
对于set、unordered_set、map、unordered_map等容器都是可以通过find函数来判断容器(集合)中是否存在某元素,还有count方法判断某元素存在的个数(大致这个意思,详细地介绍自请搜索),对于string的find方法则是子串的个数,而vector没有find方法。
#include <bits/stdc++.h>
#include <unordered_set>
using namespace std;
unordered_set<string> st;
int main()
{
int n, cnt=0;
string ans1="999999999999999999", ans2="999999999999999999";
string str;
cin>>n;
getchar();
while(n--){
getline(cin, str);
st.insert(str);
}
cin>>n;
getchar();
while(n--){
getline(cin, str);
if(st.count(str)){
++cnt;
if(str.substr(6, 8) < ans1.substr(6, 8))//substr(start, length)
ans1=str;
}
if(str.substr(6, 8) < ans2.substr(6, 8))
ans2=str;
}
cout<<cnt<<"\n";
if(cnt)
cout<<ans1<<"\n";
else
cout<<ans2<<"\n";
return 0;
}