(python3)1065.单身狗(25 分)

题目如下:

“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。

输入格式:

输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣的对数;随后 N 行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个 ID 号,为 5 位数字(从 00000 到 99999),ID 间以空格分隔;之后给出一个正整数 M(≤ 10 000),为参加派对的总人数;随后一行给出这 M 位客人的 ID,以空格分隔。题目保证无人重婚或脚踩两条船。

输出格式:

首先第一行输出落单客人的总人数;随后第二行按 ID 递增顺序列出落单的客人。ID 间用 1 个空格分隔,行的首尾不得有多余空格。

输入样例:

3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333

输出样例:

5
10000 23333 44444 55555 88888

题目解析:

此题不难理解,只是用python解答略坑==。 先看代码再解释:

n = int(input())
cp_dict = {}
for i in range(n):
    a, b = input().split()
    cp_dict[a] = b

key = cp_dict.keys()
m = input()
guest_list = input().split()
guest_set = set(guest_list)
for guest in guest_set:
    if guest in key and cp_dict[guest] in guest_set:  # key 和 guest_set都是集合,提高性能
        guest_list.remove(guest)
        guest_list.remove(cp_dict[guest])
guest_list.sort()
dog = len(guest_list)
print(dog)
if guest_list:
  print(" ".join(guest_list))

1 ,测试点1(第二个)是单身狗=0的,如果最后不分情况输出,末尾会多一个空行,过不去;

2 ,鄙人解题的基本思路是,伴侣做成一个字典,然后遍历派对的人,字典的key和value都在集合中则将两个元素从列表中移除;

3 ,测试点3/4,总是超时,在鄙人选择合适的数据结构中,两个测试点总是有一个超时,窃以为这两个点考察了两个方面的运行速度(当然还有一次两个点都超时),最后终于试验出了这个都不超时的方法= =;;所以总结一下,(至少我是这么实现的,才让Python的代码通过),① 判断伴侣的实现使用集合②在原列表中直接将伴侣移除,最后排序直接得到结果,③因为要操作原列表,因此客人的遍历操作通过集合来实现。

有的用集合,有的用列表,合理搭配最后才通过(强调的 是速度上,其实写的都对),甚至鄙人这一串代码,运行一次可能也不通过(有各种运行环境的原因吧),再提交一次就通过了。总之坑 很多,满分不易。

猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/81151771
今日推荐