鱼C论坛

 找回密码
 立即注册
查看: 2275|回复: 15

[已解决]PTA-天梯赛题目的算法优化

[复制链接]
回帖奖励 4 鱼币 回复本帖可获得 2 鱼币奖励! 每人限 1 次(中奖概率 80%)
发表于 2018-8-4 16:51:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假期闲着没事做就去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


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

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

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

  12. length = len(l2)                   # 按要求输出      
  13. i = 0
  14. if length == 0:
  15.   print('No one is handsome')
  16. else:
  17.   while i < length-1:
  18.       print(l2[i], end=' ')
  19.       i += 1
  20.   print(l2[i])
复制代码


图片是程序通过情况


最佳答案
2018-10-1 13:16:57
可能不是python最优但是还是可以过的,不过pta数据也比较水嘻嘻
  1. n = int(input())
  2. dic = {}
  3. for i in range(n):
  4.     m = input().split(' ')
  5.     if int(m[0]) > 1:
  6.         for each in m[1:]:
  7.             dic[each] = 1
  8. n_search = int(input())
  9. l1 = input().split(' ')
  10. flag = 1
  11. for each in l1:
  12.     if each not in dic and flag == 1:
  13.         print("%05d" % int(each) ,end = "")
  14.         flag = 0
  15.     elif  each not in dic:
  16.         dic[each] = 1
  17.         print(" %05d" %int(each),end = "")
  18. if flag:
  19.     print("No one is handsome")
复制代码
TIM图片20181001131516.png
57c135916ee6b03643b6dac436e4658.png

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
钱闻韬 -1 -1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-4 17:00:02 | 显示全部楼层
说实话,题目都没看懂什么意思。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-4 18:15:22 | 显示全部楼层
chongchuigu 发表于 2018-8-4 17:00
说实话,题目都没看懂什么意思。。。

就是最后把一排数字中存在于上面数字的去除掉(这个描述不太准确),然后除重,按要求输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-30 15:26:48 | 显示全部楼层

回帖奖励 +2 鱼币

评分

参与人数 1荣誉 -3 鱼币 -3 贡献 -3 收起 理由
程序员的救赎 -3 -3 -3 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-1 11:46:46 | 显示全部楼层

评分

参与人数 1荣誉 -3 鱼币 -3 贡献 -3 收起 理由
程序员的救赎 -3 -3 -3 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-1 13:16:57 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

可能不是python最优但是还是可以过的,不过pta数据也比较水嘻嘻
  1. n = int(input())
  2. dic = {}
  3. for i in range(n):
  4.     m = input().split(' ')
  5.     if int(m[0]) > 1:
  6.         for each in m[1:]:
  7.             dic[each] = 1
  8. n_search = int(input())
  9. l1 = input().split(' ')
  10. flag = 1
  11. for each in l1:
  12.     if each not in dic and flag == 1:
  13.         print("%05d" % int(each) ,end = "")
  14.         flag = 0
  15.     elif  each not in dic:
  16.         dic[each] = 1
  17.         print(" %05d" %int(each),end = "")
  18. if flag:
  19.     print("No one is handsome")
复制代码
TIM图片20181001131516.png

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +2 收起 理由
程序员的救赎 + 3 + 3 + 2 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-2 15:53:55 | 显示全部楼层

回帖奖励 +2 鱼币

评分

参与人数 1荣誉 -3 鱼币 -3 贡献 -3 收起 理由
程序员的救赎 -3 -3 -3 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-2 20:34:40 | 显示全部楼层
  1. p_num = int(input())

  2. mes = []
  3. for i in range(p_num):
  4.     m = input().split(' ')
  5.     if int(m[0]) > 1:
  6.         mes.extend(m[1:])

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

  11. for j in l1:
  12.     if not d.get(j):
  13.         l2.append(j)
  14.         d[j] = True

  15. length = len(l2)
  16. i = 0
  17. if length == 0:
  18.     print('No one is handsome')
  19. else:
  20.     while i < length-1:
  21.         print(l2[i], end=' ')
  22.         i += 1
  23.     print(l2[i])
复制代码

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
2418 -1 -1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2018-10-3 11:45:53 | 显示全部楼层

楼主这个方法更快啊又学到了 感谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-3 20:07:49 | 显示全部楼层
Legend丶Hu 发表于 2018-10-3 11:45
楼主这个方法更快啊又学到了 感谢楼主

差不多吧,只是我的简洁一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-10-8 11:06:53 | 显示全部楼层

回帖奖励 +2 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-20 09:59:45 | 显示全部楼层

回帖奖励 +2 鱼币

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

学习下

评分

参与人数 1荣誉 -2 鱼币 -2 贡献 -2 收起 理由
程序员的救赎 -2 -2 -2 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 16:34:15 | 显示全部楼层

回帖奖励 +2 鱼币

学习 学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 15:08:21 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 15:09:16 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-10 17:21:22 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表