题目链接 我的github
给一些组,每个组里面有一些学生,学生有id,分数。要求所有学生的总排名,学生属于哪个组,这些学生在组里的排名。
每组包含一个测试用例,第一行输出组的数量 N N N( ≤ 100 \leq100 ≤100),之后会输出每个组。每个组的第一行是这个组的学生数量 K K K( ≤ 300 \leq 300 ≤300),之后跟着 K K K行,每行是学生的id(13位数)和这个学生的总分
对每个例子,先输出学生的总数,然后输出学生的排名信息,格式如下
registration_number final_rank location_number local_rank
registration_number是学生的id,final_rank是学生总排名,location_number是学生属于的组号,local_rank是学生在组里的排名。组的编号从 1 1 1~ N N N,以学生总分非递增输出,如果有多个学生的分数相同,就按照id非递减输出
2 5 1234567890001 95 1234567890005 100 1234567890003 95 1234567890002 77 1234567890004 85 4 1234567890013 65 1234567890011 25 1234567890014 100 1234567890012 85 `
9 1234567890005 1 1 1 1234567890014 1 2 1 1234567890001 3 1 2 1234567890003 3 1 2 1234567890004 5 1 4 1234567890012 5 2 2 1234567890002 7 1 5 1234567890013 8 2 3 1234567890011 9 2 4
简单的排序,但是由于数据量的问题,python需要小心处理
def main(): n = int(input()) tests = [] count = 0 for x in range(n): k = int(input()) count += k temp = [] for i in range(k): line = input().split(" ") unit = [line[0], -1, str(x + 1), -1, int(line[1])] temp.append(unit) temp = sorted(temp, key=lambda i: (-i[4], i[0])) temp[0][3] = '1' for i in range(1, k): if temp[i][4] != temp[i - 1][4]: temp[i][3] = str(i + 1) else: temp[i][3] = temp[i - 1][3] tests += temp tests = sorted(tests, key=lambda x: (-x[4], x[0])) tests[0][1] = '1' print(count) print(' '.join(tests[0][:-1])) for i in range(1, count): if tests[i][4] != tests[i - 1][4]: tests[i][1] = str(i + 1) else: tests[i][1] = tests[i - 1][1] print(' '.join(tests[i][:-1])) if __name__ == "__main__": main()