程序员的救赎 发表于 2018-8-4 16:51:30

PTA-天梯赛题目的算法优化

假期闲着没事做就去pta上刷题,结果刷到一题无法完全通过,问问大家有没有好的算法?
L1-020 帅到没朋友(20 分)

先放题目

当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。

输入格式:

输入第一行给出一个正整数N(<=100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(<=1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。

注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。

输出格式:

按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出“No one is handsome”。

注意:同一个人可以被查询多次,但只输出一次。

输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888


输出样例1:
10000 88888 23333


输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111


输出样例2:
No one is handsome


这是我的解法
p_num = int(input())

mes = []
for i in range(p_num):
m = input().split(' ')
if int(m) > 1:                  # 朋友圈里面人数大于2的才计算进去
      mes.extend(m)
mes = set(mes)

search_num = int(input())
l1 = input().split(' ')
S1 = set(l1) - mes
l2 = sorted(S1, key=l1.index)# 对列表去重后按照原来的顺序排好

length = len(l2)                   # 按要求输出      
i = 0
if length == 0:
print('No one is handsome')
else:
while i < length-1:
      print(l2, end=' ')
      i += 1
print(l2)

图片是程序通过情况


chongchuigu 发表于 2018-8-4 17:00:02

说实话,题目都没看懂什么意思。。。

程序员的救赎 发表于 2018-8-4 18:15:22

chongchuigu 发表于 2018-8-4 17:00
说实话,题目都没看懂什么意思。。。

就是最后把一排数字中存在于上面数字的去除掉(这个描述不太准确),然后除重,按要求输出

whdd 发表于 2018-9-30 15:26:48

{:9_225:}

钱闻韬 发表于 2018-10-1 11:46:46

{:9_222:}

Legend丶Hu 发表于 2018-10-1 13:16:57

可能不是python最优但是还是可以过的,不过pta数据也比较水嘻嘻
n = int(input())
dic = {}
for i in range(n):
    m = input().split(' ')
    if int(m) > 1:
      for each in m:
            dic = 1
n_search = int(input())
l1 = input().split(' ')
flag = 1
for each in l1:
    if each not in dic and flag == 1:
      print("%05d" % int(each) ,end = "")
      flag = 0
    elifeach not in dic:
      dic = 1
      print(" %05d" %int(each),end = "")
if flag:
    print("No one is handsome")

2418 发表于 2018-10-2 15:53:55

{:5_100:}

程序员的救赎 发表于 2018-10-2 20:34:40

p_num = int(input())

mes = []
for i in range(p_num):
    m = input().split(' ')
    if int(m) > 1:
      mes.extend(m)

d = dict.fromkeys(mes, True)
search_num = int(input())
l1 = input().split(' ')
l2 = []

for j in l1:
    if not d.get(j):
      l2.append(j)
      d = True

length = len(l2)
i = 0
if length == 0:
    print('No one is handsome')
else:
    while i < length-1:
      print(l2, end=' ')
      i += 1
    print(l2)

Legend丶Hu 发表于 2018-10-3 11:45:53

程序员的救赎 发表于 2018-10-2 20:34


楼主这个方法更快啊{:9_227:}又学到了 感谢楼主

程序员的救赎 发表于 2018-10-3 20:07:49

Legend丶Hu 发表于 2018-10-3 11:45
楼主这个方法更快啊又学到了 感谢楼主

差不多吧,只是我的简洁一点

学学看看 发表于 2018-10-8 11:06:53

小小小菜菜菜 发表于 2018-12-20 09:59:45

本帖最后由 小小小菜菜菜 于 2018-12-20 15:04 编辑

学习下

扩展阅读 发表于 2018-12-24 16:34:15

学习 学习

心驰神往 发表于 2020-11-27 15:08:21

{:10_254:}

心驰神往 发表于 2020-11-27 15:09:16

{:10_266:}

小古比鱼 发表于 2020-12-10 17:21:22

{:10_254:}
页: [1]
查看完整版本: PTA-天梯赛题目的算法优化