蓝桥大使【算法赛】

py代码如下:

import os
import sys

n = int(input())
# 初始化数组
A = [0] * n
B = [0] * n
C = [0] * n
res = 0

for i in range(n):
    A[i], B[i] = map(int, input().split())  # 正确使用map转换

l_num = n // 2
q_num = n - l_num

for i in range(n):
    C[i] = A[i] - B[i]

# 获取C中从大到小的原始索引
sorted_indices = [idx for idx, val in sorted(enumerate(C), key=lambda x: x[1], reverse=True)]

# 按规则累加
for i in range(n):
    if i < l_num:
        res += A[sorted_indices[i]]
    else:
        res += B[sorted_indices[i]]

print(res)

陌生知识点:

1. map()函数的使用

'''
map() 函数详解
语法:map(function, iterable1, iterable2, ...)
作用:将 function 应用到每个可迭代对象的对应元素上,返回一个迭代器。
核心特点
惰性计算:map 返回迭代器,需要时才计算
批量处理:一次性对多个元素应用函数
类型转换:最常见用法是快速转换数据类型
'''
# 传统写法
tmp = input().split()      # ['10', '20']
A[i] = int(tmp[0])         # 手动转换第一个
B[i] = int(tmp[1])         # 手动转换第二个
# 简洁写法
A[i], B[i] = map(int, input().split())  # 一行搞定

2. 按值排序后获取原始索引的方法

sorted_indices = [idx for idx, val in sorted(enumerate(C), key=lambda x: x[1], reverse=True)]
'''
1、将列表 C 转换为 (索引, 值) 的二元组序列
    # C = [30, 10, 50, 40]
    # enumerate(C) 生成: (0, 30), (1, 10), (2, 50), (3, 40)
2、按值排序:key=lambda x: x[1] 表示使用每个元组的第二个元素(值)作为排序依据
3、降序排列:reverse=True 是从大到小排序
4、结果:得到按值降序排列的元组列表
    # 排序后: [(2, 50), (3, 40), (0, 30), (1, 10)]
    # 对应关系: (原索引, 值)
5、解构元组:遍历排序后的元组,将每个元组拆分为 idx 和 val
6、提取索引:只保留索引 idx,丢弃值 val
7、最终结果:[2, 3, 0, 1] ← 这就是 C 中元素从大到小的 原始位置
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇