原题链接:PTA | 程序设计类实验辅助教学平台
Tips:以下Python代码纯转发AC答案,本人未满,以后再做AC!
import sys
def p_list(info):
# 根据题目要求从大到小输出实际存在的分数
for i in range(201, 0, -1):
for j in range(100, 0, -1):
# 如果当前有值,则通过sorted排序返回一个列表,用for遍历这个排序好的列表依次输出即可
# 这里存储的是准考证号,要求从小到大
if info[i][j]:
for k in sorted(info[i][j]):
sys.stdout.write("%s %s %s\n" % (k, j, i - j))
def main():
# 通过列表推导式创建三维列表,为info[][][], 从前往后分别表示总分,德分,准考证号
info1 = [[[] for i in range(101)] for j in range(202)]
info2 = [[[] for i in range(101)] for j in range(202)]
info3 = [[[] for i in range(101)] for j in range(202)]
info4 = [[[] for i in range(101)] for j in range(202)]
cnt = 0
n, l, h = map(int, input().split())
a = [list(map(int, sys.stdin.readline().split())) for i in range(n)]
for x in a:
# 不满足题目要求的学生不予存入
if x[1] < l or x[2] < l:
continue
# 由于准考证号值过大,无法通过索引形式,只能append添加至末尾
if x[1] >= h and x[2] >= h:
info1[x[1] + x[2]][x[1]].append(x[0])
elif x[1] >= h:
info2[x[1] + x[2]][x[1]].append(x[0])
elif x[1] >= x[2]:
info3[x[1] + x[2]][x[1]].append(x[0])
else:
info4[x[1] + x[2]][x[1]].append(x[0])
cnt += 1
sys.stdout.write("%s\n" % cnt)
p_list(info1)
p_list(info2)
p_list(info3)
p_list(info4)
main()
通过列表推导式创建三维列表,为info[][][], 从前往后分别表示总分,德分,准考证号
最大为info[201[100][],总分<=200,单科<=100
通过形如进行数据添加:(不是每个坐标都有数据,所以输出时需要判断shif,if info[i][j]:)
info1[x[1] + x[2]][x[1]].append(x[0])
info[总分] [德分] [准考证号] 最终输出时,才分=总分-德分
循环遍历三维列表,需要判断当前[][]坐标是否有值(准考证号),然后进行准考证号排序【sorted(info[i][j])】,如输入样例,会得出(总分降序,同分则德分降序,同分则准考证号升序)
[10000013]
[10000012]
[10000011, 10000003] 通过遍历in排序sorted得出
[10000004]
[10000007]
[10000006]
[10000005]
[10000002]
[10000014]
[10000008]
[10000001]
290

被折叠的 条评论
为什么被折叠?



