AcWing 4269 校庆

103 阅读2分钟

20192019 年浙江大学将要庆祝成立 122122 周年。

为了准备校庆,校友会收集了所有校友的身份证号。

现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。

输入格式

输入在第一行给出正整数 NN

随后 NN 行,每行给出一位校友的身份证号(1818 位由数字和大写字母 XX 组成的字符串)。题目保证身份证号不重复。

随后给出前来参加校庆的所有人士的信息:

首先是一个正整数 MM

随后 MM 行,每行给出一位人士的身份证号。题目保证身份证号不重复。

输出格式

首先在第一行输出参加校庆的校友的人数。

然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7147-14 位给出的是 yyyymmdd 格式的生日。

如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。

数据范围

1N,M1051 \le N,M \le 10^5

输入样例:

5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042

输出样例:

3
150702193604190912

题解:

对于本题主要是进行数据的储存和遍历。可以使用set进行储存,之后在对其进行遍历并且判断即可,较为简单。

代码:

def student():
    n = int(input())
    a = set()
    for _ in range(n):
        s = input()
        a.add(s)
    return a


def all():
    m = int(input())
    b = set()
    for _ in range(m):
        t = input()
        b.add(t)
    return b


def number(a, b):
    return sum(i in a for i in b)
    # 对b进行遍历,判断元素是否在a中,如果在则计数加1

def find_old(a, b, num):
    if num:
        print(min((s for s in b if s in a), key=lambda x: x[6:14]))
        # 具体意思为对b进行遍历,对其中也在a中的元素进行寻找第6至14位最小的
    else:
        print(min((s for s in b), key=lambda x: x[6:14]))
        # 具体是找出b中第6至14位最小的


def main():
    s = student()
    t = all()
    k = number(s, t)
    print(k)
    find_old(s, t, k)


if __name__ == '__main__':
    main()