华为OD机试真题C卷-篇4

200分值题

  • 可以处理的最大任务
  • 员工派遣
  • 快递员的烦恼
  • 符号运算
  • 伐木工
  • 反射计数
  • 分披萨
  • 推荐多样性
  • 贪心的歌手
  • 螺旋数组矩阵(100)

可以处理的最大任务

  • 有一个tasks任务列表,需要处理其中的任务;
  • tasks[i] = [si, ei],该任务可以在si<=day<=ei之间的任意天处理;
  • 一天仅可以完成一个任务,输出可以处理的最大任务数;
    输入描述:
    第一行输入任务数n;
    后n行表示每个任务的开始时间si和终止时间ei,1<=si<=ei<=100000;
    输出描述:
    可以处理的最大任务数

示例1
输入:
3
1 1
1 2
1 3
输出:
3

示例2
输入:
6
5 6
5 5
3 7
2 6
4 9
5 8
输出:
5

示例3
输入:
6
1 3
2 3
3 3
1 2
2 2
1 1
输出:
3
思路: 贪心算法,每个任务尽量在最后一天处理;

  • 所有任务按照终止时间降序排序;
  • i=0第一个任务可以直接处理;
  • 从索引 i=1 开始遍历所有任务,若前一个任务的终止时间 > 当前任务的终止时间,则当前任务可以处理,因为前一个任务在最后一天处理,不影响当前任务在最后一天处理;
  • 若前一个任务的终止时间=当前任务的终止时间,前一个任务处理后(最后一天已用),endtime = pre_endtime - 1,即往前走一天,使用当前endtime判断能否处理当前i任务;
    • 若endtime >= si , 则可以处理;
    • 否则,不可以处理,则continue下一个任务;
# __author__ = "laufing"


class MaxTask:
    def solution(self, n, tasks):
        # 任务按照终止时间降序
        tasks.sort(key=lambda i:i[1], reverse=True)

        # 第一个任务是可以直接处理的
        result = 1
        endtime = tasks[0][1] # 表示前一个任务的终止时间
        # 从第二个任务开始遍历
        for i in range(1, n):
            # 前一个任务的终止时间 > 当前任务的终止时间
            if endtime > tasks[i][1]:
                result += 1
                endtime = tasks[i][1]
            else:
                # 前一个任务的终止时间 == 当前任务的终止时间
                if endtime-1 >= tasks[i][0]:
                    result += 1
                    endtime -= 1
                else:
                    continue
        print(result)


if __name__ == '__main__':
    max_task = MaxTask()
    while True:
        try:
            n = int(input().strip())
            tasks = []
            for i in range(n):
                tasks.append(list(map(int, input().strip().split())))
            max_task.solution(n, tasks)
        except KeyboardInterrupt:
            break


其他形式的解法:

 
n = int(input())
tasks = []
for i in range(n):
    tasks.append([int(x) for x in input().split(" ")])
 
tasks = sorted(tasks, key=lambda x: -x[1])
 
queue = []
end_time = 100000
result = 0
i=0
while(True):
    if(i>=n):
        while (len(queue) > 0) :
            temp = queue[0]
            queue.pop(0)
            if (end_time >= temp[0]) :
                result+=1
                end_time-=1
        break
    else :
        while (len(queue) > 0):
            if(tasks[i][1] < end_time) :
                temp = queue[0]
                queue.pop(0)
                if (end_time >= temp[0]) :
                    result+=1
                    end_time-=1 
                
            else :
                break
        queue.append(tasks[i])
        queue = sorted(queue, key=lambda x:x[0])
        end_time = tasks[i][1]
    
    i+=1
 
print(result)

 

员工派遣

在这里插入图片描述
在这里插入图片描述

 
 
nums = [int(x) for x in input().split(" ")]
x = nums[0]
y = nums[1]
count_x = nums[2]
count_y = nums[3]
left = 1
right = pow(10, 9)
while (True) :
    if(left >= right):
        break
    else :
        mid = (left + right) >> 1
        target = max(0, count_x - int(mid / y) + int(mid / (x * y))) + max(0, count_y - int(mid / x) + int(mid / (x * y)))
        if (mid - int(mid / x) - int(mid / y) + int(mid / (x * y)) >= target) :
            right = mid
        else :
            left = mid + 1
print(left)

 

快递员的烦恼

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 
 
nums = [int(x) for x in input().split(" ")]
n = nums[0]
r = nums[1]
matrix = [[float('inf') for i in range(n + 1)] for j in range(n + 1)]
distiance_map = [0 for i in range(2000)]
for i in range(n):
    nums1 = [int(x) for x in input().split(" ")]
    distiance_map[nums1[0]] = i + 1
    matrix[0][i + 1] = nums1[1]
    matrix[i + 1][0] = nums1[1]
 
for i in range(r):
    nums1 = [int(x) for x in input().split(" ")]
    matrix[distiance_map[nums1[0]]][distiance_map[nums1[1]]] = nums1[2]
    matrix[distiance_map[nums1[1]]][distiance_map[nums1[0]]] = nums1[2]
 
#保存客户访问状态,因为有n个客户,所以最多有2的10次方个状态。
cache = [[float('inf') for i in range(n + 1)] for j in range(1024)]
 
#当前访问的客户状态以及距离
queue = []
queue.append([0, 0])
cache[0][0] = 0
while (True):
    if(len(queue)<=0):
        break
    else :
        position = queue.pop(0)
        print(position[0]);
        i=0
        while(True):
            if(i>n):
                break
            else :
                if(i==position[1] or matrix[position[1]][i] ==float('inf')):
                    i+=1
                    continue
                
                new_situation = position[0]
                if(i > 0):
                    new_situation =  position[0] | pow(2, i-1)
                
                
                if (cache[new_situation][i] > cache[position[0]][position[1]] + matrix[position[1]][i]) :
                    cache[new_situation][i] = cache[position[0]][position[1]] + matrix[position[1]][i]
                    queue.append([new_situation, i])
 
            i+=1
 
final_distiance = cache[pow(2, n) - 1][0]
if(final_distiance == float('inf')):
    print(-1)
else :
    print(final_distiance)

 

符号运算

在这里插入图片描述
在这里插入图片描述


nums = []
operations = []
 
#最大公约数
def gcd(a, b) :
    if(a % b == 0):
        return b 
    else:
        return gcd(b, a%b)
 
def eval_op ():
    global nums,operations
    nums1 = nums.pop()
    nums2 = nums.pop()
    x = operations.pop()
    result = [0,0]
    if(x == '*' or x == '+' or x == '-') :
        result[0] = nums2[0] * nums1[0]
    else :
        result[0] = nums2[0] * nums1[1]
    
 
    sum_a = nums2[1] * nums1[0]
    sum_b = nums1[1] * nums2[0]
    if(x == '*'):
        result[1] = nums2[1] * nums1[1]
    elif (x == '+'):
        result[1] = sum_a + sum_b
    elif (x == '-') :
        result[1] = sum_a - sum_b
    else :
        result[1] = nums2[1] * nums1[0]
    
    nums.append(result)
 
def get_priority(input_char):
    if(input_char == '+' or input_char == '-') :
        return 0
    else :
        return 1
        
    
 
input_str = input()
nums = []
operations = []
length = len(input_str)
current = ""
i = 0
while (i < length) :
    if (input_str[i].isdigit()) :
        while (True) :
            if(not input_str[i].isdigit()):
                break
            current += input_str[i]
            if (i + 1 >= length) :
                break
            i+=1
        nums.append([1, int(current)])
        current = ""
    elif (input_str[i] == '(') :
        operations.append(input_str[i])
    elif (input_str[i] == ')') :
        while (operations[0] != '(') :
            eval_op()
        operations.pop(0)
    elif(input_str[i] == ' '):
        i+=1
        continue
    else :
        while (len(operations)>0 and operations[0] != '('
            and get_priority(input_str[i]) <= get_priority(operations[0])) :
            eval_op()
        operations.append(input_str[i])
     
    i+=1
 
while (True) :
    if(len(nums) <= 1):
        break
    else :
        eval_op()
 
result = nums[0]
if (result[0] == 0) :
    print("ERROR")
else :
    up = gcd(result[0], result[1])
    result[0] /= up
    result[1] /= up
    output_str = ""
    if(result[0] * result[1] < 0):
        output_str += "-"
    if (abs(result[0]) == 1) :
        print(output_str+str(result[1]))
    else :
        print(output_str + str(abs(int(result[1]))) + "/" +str(abs(int(result[0]))))
    
   

 

伐木工

在这里插入图片描述

import functools
import sys
import copy
import re
import math
 
n =int(input())
cache = [0 for i in range(n+1)]
cache[0] = 0
memory = [[] for i in range(n+1) ]
 
for i in range(1,n+1):
    memory[i].append(i)
    cache[i] = i
 
i=1
while(True):
    if(i>n):
        break
    else :
        for j in range(1, i):
            if(cache[i] > cache[j] * cache[i - j]):
                continue
            elif(cache[i] < cache[j] * cache[i - j]):
                cache[i] = cache[j] * cache[i - j]
                memory[i] = []
                for k in range(len(memory[j])):
                    memory[i].append(memory[j][k])
                for k in range(len(memory[i-j])):
                    memory[i].append(memory[i-j][k])
            else :
                if(len(memory[i]) > len(memory[j]) + len(memory[i-j])):
                    memory[i] = []
                    for k in range(len(memory[j])):
                        memory[i].append(memory[j][k])
                    for k in range(len(memory[i-j])):
                        memory[i].append(memory[i-j][k])
    i+=1
 
result = memory[n]
result.sort()
output_str = ""
for j in range(len(result)):
    output_str += str(result[j]) + " "
print(output_str)
    

 

反射计数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


import math
 
nums = [int(x) for x in input().split(" ")]
w = nums[0]
h = nums[1]
x = nums[2]
y = nums[3]
sx = nums[4]
sy = nums[5]
t = nums[6]
matrix = [[0 for i in range(w)] for j in range(h)]
for i in range(h):
    inupt_str = input()
    for j in range(w):
        matrix[i][j] = ord(inupt_str[j]) - ord('0')
    
 
 
result = 0
while (True):
    if(t<0):
        break
    else :
        if ((x + sx < 0) or (x + sx > w - 1)) :
            sx = -sx
        elif ((y + sy < 0) or (y + sy > h - 1)) :
            sy = -sy
        if (matrix[y][x] == 1) :
            result+=1
        
        x += sx
        y += sy
    
    t-=1
print(result)

 

分披萨

在这里插入图片描述
在这里插入图片描述

 
n =int(input())
nums = []
for i in range(n):
    nums.append(int(input()))
memory = [[0 for i in range(n)] for j in range(n)]
 
def backtrace(left, right) :
    global n,nums,memory
    if(nums[left] > nums[right]):
        left = (left + n + 1) % n
    elif(nums[left] < nums[right]):
        right = (right + n - 1) % n
    
 
    if (memory[left][right] <= 0) :
        if (left == right) :
            memory[left][right] = nums[left]
        else :
            new_left = (left + 1) % n
            new_right = (right + n - 1) % n
            memory[left][right] = nums[left] + backtrace(new_left, right)
            if(nums[right] + backtrace(left,new_right) > memory[left][right]):
                memory[left][right] = nums[right] + backtrace(left,new_right)
        return memory[left][right]
    else :
        return memory[left][right]
    
 
result = 0
i=0
while(True):
    if(i>=n):
        break
    else :
        left = (i + n + 1) % n
        right = (i + n - 1) % n
        target = backtrace(left, right)
        if(target+nums[i] > result):
            result = target+nums[i]
    i+=1
print(result) 

 

推荐多样性

在这里插入图片描述
在这里插入图片描述

 
n =int(input())
m = int(input())
input_matrix = []
while(True):
    try:
        input_matrix.append([int(x) for x in input().split(" ")])
    except:
        break
output_length = [0 for x in range(len(input_matrix))]
nums = []
while (True) :
    if(len(nums) >= n * m):
        break
    else :
        for i in range(len(input_matrix)):
            index = len(input_matrix[i])
            if(len(input_matrix[i]) > output_length[i] + 4):
                index = output_length[i] + 4
            j = output_length[i]
            while(j<index):
                nums.append(input_matrix[i][j])
                j+=1
            output_length[i] = index
output_str = ""
for j in range(n):
    for i in range(m):
        output_str += str(nums[i * n + j]) + " "
print(output_str[:-1]) 

 

贪心的歌手

在这里插入图片描述
在这里插入图片描述

 
params = [int(x) for x in input().split(" ")]
T = params[0]  
N = params[1]  
nums =  [int(x) for x in input().split(" ")]
matrix = []  
for i in range(N):
    matrix.append([int(x) for x in input().split(" ")])
 
 
for i in range(len(nums)):
    T-=nums[i]
 
moneys = []
i=0
while(True):
    if(i>=N):
        break
    else:
        temp1 = matrix[i][0]
        temp2 = matrix[i][1]
        j=0
        while(True):
            if(j>=T or temp1<=0):
                break
            else:
                moneys.append(temp1)
                temp1 = temp1- temp2
    i+=1
 
moneys = sorted(moneys, key=lambda x:-x)
 
result = 0
k = 0
while(True):
    if(k>=T):
        break
    else:
        result += moneys[k]
    k+=1
print(result)

 

螺旋数组矩阵(100)

在这里插入图片描述
在这里插入图片描述

 
directions = [0, 1, 0, -1, 0]
params = [int(x) for x in input().split(" ")]
k = params[0]  
n = params[1]  
 
matrix = [["*" for i in range(int((k - 1) / n + 1)) ] for j in range(n)]
start_x = 0
start_y = 0
count = 1 
index = 0 
 
while (True):
    if(count > k):
        break
    else :
        matrix[start_x][start_y] = str(count)
        count+=1
        new_x = start_x + directions[index]
        new_y = start_y + directions[index+1]
        
        if (new_x < 0 or new_x >= n or new_y < 0 or new_y >= (k - 1) / n +1 
            or matrix[new_x][new_y]!="*") :
            index = (index + 1) % 4
            start_x = start_x + directions[index]
            start_y = start_y + directions[index+1]
        else :
            start_x= new_x
            start_y= new_y
 
 
for i in range(n):
    output_str = ""
    for j in range(int((k - 1) / n + 1)):
        output_str += matrix[i][j]
        if (j != (k - 1) / n):
            output_str += " "
    print(output_str)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403759.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全-nc(Netcat)工具详解

经常在反弹shell的时候使用nc命令&#xff0c;但是从来没有了解过&#xff0c;今天翻书看到了&#xff0c;准备记录一下。 nc全称Netcat&#xff0c;是TCP/IP连接的瑞士军刀。哈哈我最喜欢瑞士军刀了。 有一个比较偏的知识点&#xff0c;nc还可以探测目标的端口是否开放&…

Flink中的双流Join

1. Flink中双流Join介绍 Flink版本Join支持类型Join API1.4innerTable/SQL1.5inner,left,right,fullTable/SQL1.6inner,left,right,fullTable/SQL/DataStream Join大体分为两种&#xff1a;Window Join 和 Interval Join 两种。 Window Join又可以根据Window的类型细分为3种…

【王道数据结构】【chapter6图】【P234t5】

假设图用邻接表表示&#xff0c;设计一个算法&#xff0c;输出从顶点vi到顶点vj的所有简单路径 #include <iostream>] #include <string.h> #define maxsize 10 typedef struct node{int data;struct node *next; }node ,*pnode;pnode buynode(int x) {pnode tmp(p…

【Linux取经路】文件系统之缓冲区

文章目录 一、先看现象二、用户缓冲区的引入三、用户缓冲区的刷新策略四、为什么要有用户缓冲区五、现象解释六、结语 一、先看现象 #include <stdio.h> #include <string.h> #include <unistd.h>int main() {const char* fstr "Hello fwrite\n"…

电路设计(26)——速度表的multisim仿真

1.设计要求 设计一款电路&#xff0c;能够实时显示当前速度。 用输入信号模拟行驶的汽车&#xff0c;信号频率的1hz代表汽车速度的1m/s。最后速度显示&#xff0c;以km/h为单位。 2.电路设计 当输入信号频率为40HZ时&#xff0c;显示的速度应该为144KM/h&#xff0c;仿真结果为…

petalinux_zynq7 驱动DAC以及ADC模块之一:建立IP

0. 环境 - ubuntu18 - vivado 2018.3 - mizar z7010 ada106模块 1. vivado 1.1 创建vivado工程 运行vivado source /tools/Xilinx/Vivado/2018.3/settings64.sh vivado& 创建vivado工程 Vivado -> Create Project -> Next -> -> Project name: …

OpenCV中图像的HSV色彩空间

在HSV 色彩空间中H, S, V 这三个通道分别代表着色相(Hue)&#xff0c;饱和度(Saturation)和明度(Value)&#xff0c; 原本输出的HSV 的取值范围分别是0-360, 0-1, 0-1; 但是为了匹配目标数据类型OpenCV 将每个通道的取值范围都做了修改,于是就变成了0-180, 0-255, 0-255 impo…

人机交互新研究:MIT开发了结合脑电和眼电的新式眼镜,与机器狗交互

还记得之前的AI读心术吗&#xff1f;最近&#xff0c;「心想事成」的能力再次进化&#xff0c; ——人类可以通过自己的想法直接控制机器人了&#xff01; 来自麻省理工的研究人员发表了Ddog项目&#xff0c;通过自己开发的脑机接口&#xff08;BCI&#xff09;设备&#xff…

设置墙、楼板每层的厚度和材质——群问题整理003

你好&#xff0c;这里是BIM的乐趣&#xff0c;我是九哥~ 今天分享的是设置墙、楼板等每层的厚度和材质。 我们都知道&#xff0c;Revit中墙、板这类系统族&#xff0c;厚度设置和普通族是不太一样的&#xff0c;他的厚度参数可读&#xff0c;但是并不可设置&#xff0c;因为我…

flannel网络拓扑

测试环境创建 在k8s中部署flannel网络插件 https://blog.csdn.net/weixin_64124795/article/details/128894411 参考文章部署k8s集群和flannel网络插件 我的k8s集群物理环境 我的集群中只有两个节点master和node1节点 [rootmaster sjs]# kubectl get node NAME STATU…

MySQL 索引原理以及 SQL 优化

索引 索引&#xff1a;一种有序的存储结构&#xff0c;按照单个或者多个列的值进行排序。索引的目的&#xff1a;提升搜索效率。索引分类&#xff1a; 数据结构 B 树索引&#xff08;映射的是磁盘数据&#xff09;hash 索引&#xff08;快速锁定内存数据&#xff09;全文索引 …

华为OD机试真题-查找接口成功率最优时间段-2023年OD统一考试(C卷)--Python3--开源

题目&#xff1a; 考察内容&#xff1a; for 时间窗口list(append, sum, sort) join 代码&#xff1a; """ 题目分析&#xff1a;最长时间段 且平均值小于等于minLost同时存在多个时间段&#xff0c;则输出多个&#xff0c;从大到小排序未找到返回 NULL 输入…

PostgreSQL 的实体化视图介绍

PostgreSQL 实体化视图提供一个强大的机制&#xff0c;通过预先计算并将查询结果集存储为物理表来提高查询性能。本教程将使用 DVD Rental Database 数据库作为演示例子&#xff0c;指导你在 PostgreSQL中创建实体化视图。 了解实体化视图 实体化视图是查询结果集的快照&…

T-Dongle-S3开发笔记——分区表

参考&#xff1a; ESP32之 ESP-IDF 教学&#xff08;十三&#xff09;—— 分区表_esp32分区表-CSDN博客 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 分区表是 ESP32 划分内部 flash 闪存的清单&#xff0c;它将 flash 划分为多个不同功能的区域用于…

【前端素材】推荐优质后台管理系统inspina平台模板(附源码)

一、需求分析 后台管理系统是一个集成了多种功能模块的系统&#xff0c;通过这些模块的协同工作&#xff0c;实现对网站、应用程序或系统的全面管理和控制。管理员通过后台管理系统可以高效地管理用户、内容、数据、权限等方面的工作&#xff0c;确保系统的正常运行和安全性。…

MariaDB落幕和思考

听过MySQL的基本也都知道 MariaDB。MariaDB由MySQL的创始人主导开发&#xff0c;他早前曾以10亿美元的价格&#xff0c;将自己创建的公司MySQL AB卖给了SUN&#xff0c;此后&#xff0c;随着SUN被甲骨文收购&#xff0c;MySQL的所有权也落入Oracle的手中。传闻MySQL的创始人担心…

【火猫TV】DOTA2-喀山未来运动会:LGD 战队2-0击败Neon

在2月22号进行的俄罗斯喀山未来运动会DOTA2项目淘汰赛上,LGD 战队以2-0击败Neon战队晋级下一轮。双方对阵第二局,LGD对线期三路优,中期圣堂小鱼越打越肥,轻松拿下了比赛的胜利,以下是对决战报。转载:火猫TV资讯https://www.huomaotv.com/ LGD战队在天辉,阵容是小鱼、圣堂、玛尔…

使用ffmpeg实现视频片段截取并保持清晰度

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i input.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-ve…

Python Web开发记录 Day2:CSS

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 二、CSS1、CSS-初始入门①快速了解②CSS应用方式…