CCF 202006-2 稀疏向量 python 满分

    科技2022-07-11  94

    CCF 202006-2 稀疏向量 python 满分

    题目叙述问题描述:略输入格式:略输出格式:略样例 满分证明解题思路自己版本大佬版本 满分代码自己版本大佬版本 感谢及参考博文

    题目叙述

    问题描述:略

    输入格式:略

    输出格式:略

    样例

    样例输入 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

    Processed: 0.023, SQL: 8