考试平台: 赛码
题目类型: 20道选择 + 2道编程题
考试时间: 2024-03-23 (两小时)
题目描述
小希在森林冒险的时候发现一个神奇的木桶,某些时会凭空出现一些苹果,小希很解地大家分享了这一个神奇的木桶,让大家都能享用这些大自然的溃赠。
为了方便大家来享用,小希对这一神奇的木桶的苹果数量改变进行了记录通知大家,以免在木桶空时让特意过来的人们空手而归。
小希记录下来的数量改变有3种:
-
苹果数是凭空增加了m个。
-
人们来参观时想要取走m个苹果,不过如果此时苹果数景不足m则放弃此次操作,一个都不取。
-
小希取走1/m的苹果进行义卖活动,如果苹果数量不能除,小希会对其进行向上取整,例如有10个苹果时,要拿走1/4,那么小希会拿走[10 / 4] = 3 个苹果。
小希记得最初时木桶中的苹果数量为0,但她忘记现在苹果数景是多少了,请你帮帮她。
输入描述
第一行一个整数n,表示会有n次操作。
第二行2n个整数 o p 1 , m 1 , o p 2 , m 2 . . . o p n , m n op_1, m_1, op_2, m_2 ... op_n, m_n op1,m1,op2,m2...opn,mn,其中 o p i op_i opi 为第 i 次的操作类型, m i m_i mi 为对应参数。意义如题面,
$ 1 \le n \le 50000,2 \le m \le 1000 $
输出描述
输出一个整数表示这n次操作之后剩余苹果数量。
样例输入
5
1 2 2 3 1 5 2 4 3 2
样例输出
1
提示
第一次操作增加2个苹果。现在剩余2个苹果。
第二次操作尝试拿3个苹果,因为不足3个放弃此次操作。现在仍然剩余2个苹果。
第三次操作增加5个苹果。现在剩余7个苹果。
第四次操作尝试拿4个苹果,足够,拿走后剩余3个苹果。
第五次操作拿走1/2,3不能被2整除,向上取整拿走2个。拿走后剩余1个苹果。
题解
这道题属于模拟类型的算法题,需要按照题目描述的规则模拟操作过程,最终计算出剩余的苹果数量。
解题思路:
- 用一个变量
count
记录当前木桶中的苹果数量,初始值为0。- 遍历输入的操作记录,根据操作类型进行相应的处理:
- 如果是类型1的操作,即苹果数增加,直接将苹果数增加对应的数量。
- 如果是类型2的操作,即人们来取苹果,判断苹果数是否足够,足够则减去对应的数量。
- 如果是类型3的操作,即小希取走苹果进行义卖,计算需要取走的苹果数量并减去。
n = int(input())
arr = list(map(int, input().split()))
count = 0
for i in range(0, len(arr), 2):
op, m = arr[i], arr[i+1]
if op == 1:
count += m
elif op == 2:
if count >= m:
count -= m
else:
count -= (count + m - 1) // m
print(count)
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏