赞
踩
题目描述
小朋友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。
算法复杂度要求不高于nLog(n);学号为整数类型,队列规模<=10000;
输入描述
1、第一行:输入已排成队列的小朋友的学号 (正整数),以”,”隔开
例如: 93,95,97,100,102,123,155 2、第二行:小明学号,如110;
输出描述
输出一个数字,代表队列位置 (从1开始)例如: 6
用例
输入93,95,97,100,102,123,155
110输出6
import bisect
arr = list(map(int, input().split()))
x = int(input())
idx = bisect.bisect_left(arr, x)
print(idx + 1)
w=[0]+list(map(int,input().split())) # 从输入中读取一个整数列表,并在列表开头添加一个0
n=len(w) # 获取列表的长度
res=0 # 初始化一个变量来存储最大和
def dfs(u,sum): # 定义一个函数dfs,它接受两个参数:一个节点索引u和从根节点到当前节点的值之和sum
if u>=n or w[u]==-1: # 如果节点索引超出范围或节点值为-1(表示叶节点),则返回
return
global res # 使用全局变量res
res=max(res,sum+w[u]) # 更新res为其当前值和sum加上当前节点值的最大值
dfs(u*2,sum+w[u]) # 递归调用dfs函数,传入左子节点和更新后的sum
dfs(u*2+1,sum+w[u]) # 递归调用dfs函数,传入右子节点和更新后的sum
dfs(1,0) # 以初始和为0调用dfs函数,传入根节点
print(res) # 打印最大和
class App: def __init__(self, name, p, start, end): self.name = name # 应用名称 self.p = p # 优先级 self.start = start # 开始时间 self.end = end # 结束时间 def trans_to(data): arr = data.split(":") hour = int(arr[0]) # 小时部分 minute = int(arr[1]) # 分钟部分 return hour * 60 + minute # 将时间转换为分钟表示 def trans_to_app(s): arr = s.split(" ") name = arr[0] # 应用名称 p = int(arr[1]) # 优先级 start = trans_to(arr[2]) # 开始时间 end = trans_to(arr[3]) # 结束时间 return App(name, p, start, end) n = int(input()) # 输入应用的数量 apps = [] # 读取每个应用的信息 for i in range(n): s = input() temp = trans_to_app(s) # 如果开始时间晚于结束时间,忽略该应用 if temp.start > temp.end: continue apps.append(temp) res = [] # 遍历每个应用 for i in range(len(apps)): ids = [] # 找到与当前应用时间段有重叠的应用 for j in range(len(res)): if res[j].start <= apps[i].end and apps[i].start <= res[j].end: ids.append(j) mx = -1 # 找到重叠应用中优先级最高的 for j in ids: mx = max(mx, res[j].p) # 如果当前应用优先级更高,则移除重叠应用,添加当前应用 if mx < apps[i].p: for j in reversed(ids): res.pop(j) res.append(apps[i]) time = trans_to(input()) # 输入时间 ans = "NA" # 查找当前时间所在的应用 for app in res: if app.start <= time and time <= app.end: ans = app.name break print(ans) # 输出结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。