ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【Python】洛谷P7614 [COCI2011-2012#2] NAJBOLJIH 5

2026/8/13 15:08:40 拓冰建站 浏览量
【Python】洛谷P7614 [COCI2011-2012#2] NAJBOLJIH 5

P7614 [COCI2011-2012#2] NAJBOLJIH 5

题目描述

给定 8 8 8 个数字 X 1 , X 2 , . . . , X 8 X_1,X_2,...,X_8 X1,X2,...,X8,从中选出 5 5 5 个数字,使得这 5 5 5 个数字的总和最大。输出这 5 5 5 个数字的和以及它们的编号。 X i X_i Xi 的编号为 i i i

输入格式

输入共 8 8 8 行,第 i i i 行包含一个正整数 X i X_i Xi保证所有 X i X_i Xi 互不相同

输出格式

输出共两行。

第一行包含一个整数,表示最大的总和。

第二行包含 5 5 5 个整数,表示 5 5 5 个数的编号,按升序排序

样例 #1

样例输入 #1

20
30
50
48
33
66
0
64

样例输出 #1

261
3 4 5 6 8

样例 #2

样例输入 #2

20
0
50
80
77
110
56
48

样例输出 #2

373
3 4 5 6 7

样例 #3

样例输入 #3

20
30
50
80
110
11
0
85

样例输出 #3

355
2 3 4 5 8

提示

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ X i ≤ 150 1 \le X_i \le 150 1Xi150

【说明】

本题分值按 COCI 原题设置,满分 50 50 50

题目译自 COCI2011-2012 CONTEST #2 T1 NAJBOLJIH 5

代码实现

由于需要对输入的 8 个数字取最大的 5 个数字,计算其总和并以升序输出其编号,故在输入时将每个输入的数字与其编号绑定(元组形式存储),并直接进行排序取 top 5。

  1. 使用 sorted() 函数先根据数字大小进行排序,取出最大的 5 个数字
  2. 对这 5 个数字进行编号的升序排列
  3. 统计 5 个数字的总和
  4. 依次输出这些数字的编号
top5 = sorted(sorted([(i + 1, int(input().strip())) for i in range(8)], key=lambda x: -x[1])[:5], key=lambda x: x[0])
print(sum(i[1] for i in top5))
print(" ".join([str(i[0]) for i in top5]))