首页 > 其他分享 >2024.4.10华为暑期实习笔试题解尝试1~2

2024.4.10华为暑期实习笔试题解尝试1~2

时间:2024-04-12 19:55:06浏览次数:30  
标签:10 2024.4 parent int 题解 print range 计费 input

题目在 4.10华为暑期实习笔试题解 努力开摆的小鱼 2024-04-10

T1

简单难度,按照题意顺着写就可以

n = int(input())  # 表示计费日志的条数
lst = []  # 去重后的日志
ss = set()  # 为了去重
for i in range(n):
    s = tuple(input().split(","))
    t = s[0] + s[1] + s[2]  # 时间+客户标识+计费因子
    if s not in ss:  # 同一客户同一计费因子在相同时间戳上,只保留第一次时间戳
        lst.append(s)
        ss.add(t)

fac = dict()  # 计费因子:计费单价

m = int(input())  # 计费因子的数量
for i in range(m):
    s = input().split(",")
    fac[s[0]] = int(s[1])

val = dict()  # 客户标识:费用
for i in lst:
    if i[1] not in val:  # 客户标识
        val[i[1]] = 0  # 费用初始化为 0
    # print(f"DEBUG user:{i[1]} fac:{i[2]} v:{fac[i[2]]} t:{i[3]}")
    t = int(i[3])
    if t < 0 or t > 100:  # 计费时长不在范围内,当成0其实可以在输入时排除
        t = 0
    val[i[1]] += fac[i[2]] * t  # 计费费用, 计费单价*计费时长

# 转存到list为了排序
ans = []
for i, j in val.items():
    ans.append((i, j))

ans.sort(key=lambda x: x[0])  # 输出按客户标识字典序升序排序

for i in ans:
    print(f"{i[0]},{i[1]}")

一个朋友输出没有排序,90分/100分

T2

怎么去查找AE之间的相似度传递关系呢?并查集是个什么玩意?于是去学习了一下

a = []  # 输入的相似度矩阵
n = int(input())
for r in range(n):
    row = list(map(int, input().split()))
    a.append(row)
# 根据相似度矩阵将五个元素划分为不同的集合,相似度大于0即代表两个元素属于统一集合
parent = list(range(n))  # 初始化并查集,每个元素都是不同的集合


# print(f"DEBUG parent:{parent}")
def find(x):
    # 查找元素x所属的集合的根节点,并进行路径压缩
    if x != parent[x]:
        parent[x] = find(parent[x])  # 路径压缩
    return parent[x]


similar = [0] * n  # 记录每个集合的相似度总和
for r in range(n):
    for c in range(n):
        if a[r][c] != 0:  # 相似度不为0
            ix = find(r)
            iy = find(c)
            if ix != iy:
                parent[iy] = ix
                similar[r] += a[r][c]  # 相似度累加

# print(f"DEBUG parent:{parent} similar:{similar}")
# 计算集合的数量
sf = set([find(i) for i in parent])
# print(f"DEBUG sf:{sf} sf.num:{len(sf)}")  # 集合数量
# 计算每个集合的相似度之和
from collections import defaultdict

resd = defaultdict(int)
for s in sf:
    for i in range(n):
        if parent[i] == s:
            resd[s] += similar[i]
# print(f"DEBUG resd:{resd.values()}")  # 集合的相似度之和
ret = sorted(resd.values(), reverse=True)
# print(f"DEBUG ret:{ret}")
print(*ret)

T3

用例中,0结点是孤岛

标签:10,2024.4,parent,int,题解,print,range,计费,input
From: https://www.cnblogs.com/guilinmifen/p/18131997

相关文章

  • SQL SERVER 从入门到精通 第5版 第三篇 高级应用 第10章 存储过程 读书笔记
    第10章存储过程 >.存储过程概述存储过程(storedprocedure)是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元来处理.存储过程取代了传统的逐条执行SQL语句的方式.一个存储过程中可以包含增删改查等一系列SQL语句,当这个存储过程被调用时,这些操作也......
  • 题解:P10320 勇气(Courage)
    P10320勇气(Courage)推导过程本题是一道数学题,重点是如何推导出正确式子。首先,先特判几个特殊点:当\(n>=2\)且\(x=2\)时,是不存在解的,战斗力无论何时都不会超过\(2^{n}\)。当\(x\)不强化就以大于\(2^{n}\)。当\(x\)第一次强化达到\(x^{2}\)时,大于\(2^{n}\)......
  • 实验2 C语言分支与循环基础应用编程 王刚202383310053
    1#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#defineN55intmain()6{7intnumber,i;8srand(time(0));9for(i=0;i<N;i++)10{number=rand()%65+1;11printf("20238331%04d\n",number);12}13sy......
  • P10064 [SNOI2024] 公交线路
    显然只需要考虑叶子结点的连边情况,设一个结点\(u\)仅经过一条路径能到达的点的集合为\(S_x\),则条件等价于对于任意两个叶子结点\(x,y\),\(S_x\)与\(S_y\)有交.由树的性质,所有\(S_x\)的交集非空(否则存在环),于是交集为一个连通块,上点边容斥.于是问题转化为两部分:求所有\(......
  • 分享10款实用的办公软件,个个都是效率神器,好用到爆!
    在这个信息化、数字化的时代,办公软件已经成为了我们日常工作中不可或缺的一部分。它们不仅可以帮助我们更高效地完成工作任务,还能提升我们的工作效率和团队协作能力。今天,我将为大家分享10款实用的办公软件,个个都是效率神器,好用到爆! 01、Everything Everything是一款极速文......
  • P4211 LCA 题解
    前置知识:树剖、差分题意给定一个\(n\)个节点的有根树树,根为\(1\)。有\(m\)个询问,每个询问给定\(l,r,z\),求\(\sum\limits_{i=l}^rdep[\textrm{LCA}(i,z)]\)。其中\(dep[x]\)表示\(x\)的深度,有\(dep[1]=1\)。题解式子中的\(dep\)不太好算,考虑转化成形式化......
  • java中cron表达式 每10分钟执行一次
    在Java中,可以使用Quartz框架来定义和调度任务,包括使用Cron表达式来定义任务的执行时间。下面是一个使用Quartz框架实现每10分钟执行一次任务的示例:添加Quartz依赖在Maven项目中,添加以下依赖到pom.xml文件中:<dependency><groupId>org.quartz-scheduler</groupId><arti......
  • MURF1040CT-ASEMI快恢复二极管MURF1040CT
    编辑:llMURF1040CT-ASEMI快恢复二极管MURF1040CT型号:MURF1040CT品牌:ASEMI封装:TO-220F最大平均正向电流(IF):10A最大循环峰值反向电压(VRRM):400V最大正向电压(VF):1.30V工作温度:-55°C~150°C反向恢复时间:35ns芯片个数:2芯片尺寸:72mil引脚数量:3正向浪涌电流(IFMS):150A包装方式:50/......
  • [题解] [NOIP2011] 聪明的质检员
    [NOIP2011]聪明的质监员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\)。检验矿产的流程是:给定\(m\)个区间\([l_i,r_i]\);选出一个参数\(W\);对......
  • Windows 10 专业工作站版:Win10中最强大的版本?
    Windows10提供了多个版本,满足不同用户的需求。其中,Windows10专业工作站版作为面向专业用户的旗舰版本,在性能、功能和安全方面都拥有显著优势,堪称Win10家族中最强大的版本。强悍的硬件支持Windows10专业工作站版支持更高的硬件配置,包括:最多支持4个CPU,而其他版本最多仅......