1、打酱油
#打酱油
n = int(input())
ans = 0
if n >= 50: #如果手上的钱够买5瓶
number = n // 50 #可以买多少组的5瓶
ans += number * 7
n -= 50 * number
if n >= 30: #如果手上的钱够买3瓶
number = n // 30
ans += 4 * number
n -= number * 30
if n >= 10:
number = n // 10
ans += number
print(ans)
2、公共钥匙盒
两个方法,但思路都一样,表现形式不同,差的是执行时间。本来打算试试用双指针遍历时间,对空钥匙勾查找进行优化的,但没有时间了,就先这样吧
import heapq
from collections import defaultdict
#公共钥匙盒
n,k = map(int,input().split())
key = [i for i in range(n+1)] #将钥匙编号进行初始化,要是被借走,就将其初始化为0
key[0] = float('-inf')
borrow_time = defaultdict(list) #分开统计老师借钥匙和换钥匙的时间点有哪些
return_time = defaultdict(list)
for i in range(k):
a,b,c = map(int,input().split()) #在b时刻借钥匙,使用c个单位的钥匙归还
borrow_time[b].append(a)
heapq.heappush(return_time[c+b],a) #因为还钥匙是按照钥匙的大小编号还,所以借用小根堆
#1、将借钥匙的时间和还钥匙的时间合并,挨个遍历
time = sorted(set(list(borrow_time)+list(return_time)))
for i in time:
if i in return_time.keys(): #如果同一时刻
j = 1
while j < n + 1 and return_time[i]:
if key[j] == 0:
key[j] = heapq.heappop(return_time[i])
j += 1
if i in borrow_time.keys():
while borrow_time[i]: #借钥匙的时候,钥匙的位置是动态变化的
key[key.index(borrow_time[i].pop(0))] = 0
'''
#2、双指针法,判断当前时刻是处于借钥匙还是还钥匙
borrow = sorted(list(borrow_time.keys()))
return_ = sorted(list(return_time.keys()))
i = 0
j = 0
while i < len(borrow) or j < len(return_):
if i
'''
for i in key[1:]:
print(i,end=' ')
B
#公共钥匙盒
N,K = map(int,input().split())
key = [] #每个钥匙位存放的值位钥匙编号,为零则表示借出去了
for i in range(N+1):
key.append(i)
key[0] = -1
borrow = {} #统计每个时间段借钥匙和换钥匙的情况
_return = {}
for i in range(K):
t = list(map(int,input().split())) #三个整数分别表示要使用的钥匙编号、开始上课的时间、上课时长
if t[1] not in borrow.keys():
borrow[t[1]] = [t[0]]
else:
borrow[t[1]].append(t[0])
if t[1]+t[2] not in _return.keys():
_return[t[1]+t[2]] = [t[0]]
else:
_return[t[1]+t[2]].append(t[0])
for i in sorted(set(list(borrow.keys())+list(_return.keys()))): #合并所有借钥匙和还钥匙的时刻
#判断每个时刻是借出去的时刻还是还的时刻,如果两个都属于,就先还再借
if i in _return.keys():
for j in sorted(_return[i]):
for k in range(N+1):
if key[k] == 0:
key[k] = j
break
if i in borrow.keys():
for j in borrow[i]:
key[key.index(j)] = 0
for i in key[1:]:
print(i,end=' ')