CCF 202006-2 稀疏向量 python 满分

56 篇文章 4 订阅

题目叙述

问题描述:略

输入格式:略

输出格式:略

样例

样例输入
10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40

样例输出
-20

满分证明

第一个是我自己版本;
第二个是大佬版本。
各有千秋(#.#)
第一个是我自己版本

解题思路

自己版本

刚开始也是超时,这个是修改过好多遍的
第一次,使用列表,尝试全部读完再处理,超时;
第二次,使用列表,尝试读完一个,读另一个时边读边处理,超时;
第二次,使用字典,尝试读完一个,读另一个时边读边处理,成功。

大佬版本

一次性读入,两个并行处理,时间取决于最短
总结
__读取花不了多长时间,但处理花时间多。__如果依次遍历,可能会超时,使用字典的好处就是直接找到索引位置,不需要逐个遍历。
用list的时候,去找u向量中指定值时,花时间太多。

满分代码

自己版本

n, a, b = map(int, input().split())
dict_u = {}
sum = 0
for _ in range(a):
    k_1, val_1 = map(int, input().split())
    dict_u[k_1] = val_1
for _ in range(b):
    k_2, val_2 = map(int, input().split())
    if k_2 in dict_u:
        sum += val_2 * dict_u[k_2]

print(sum)

大佬版本

import sys
n, a, b = tuple(map(int, input().split()))
vector = list(map(int, sys.stdin.read().split()))
i = 0
j = 0
s = 0
while i < a and j < b:
    if vector[i * 2] == vector[(a + j) * 2]:
        s += vector[i * 2 + 1] * vector[(a + j) * 2 + 1]
        i += 1
        j += 1
    elif vector[i * 2] < vector[(a + j) * 2]:
        i += 1
    else:
        j += 1
print(s)

感谢及参考博文

部分内容参考以下链接,这里表示感谢 Thanks♪(・ω・)ノ
主要是看评论区的大佬 康风建
参考博文1 202006-2 CCF认证考试 Python版 稀疏向量
https://blog.csdn.net/weixin_41480156/article/details/107701647

需者自取传送门(∩ᄑ_ᄑ)⊃━☆【CCF 2013-2021】本博主整理历年至少前两题 python 满分代码目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值