维护剩余库存线性模拟取药过程,统计库存不足被拒绝的病人数。
OJ: roj
题目 ID: 1075
难度:入门
标签:模拟入门
创建: 2026-09-29 17:30
更新: 2026-10-05 00:21
题目描述
药房已知某种药品每天开始时的库存总量 30、6、10 5 20 6 7 8,输出 2。
思路
按时间顺序线性模拟:用一个变量维护当前剩余库存,逐个读入需求,库存够就扣减、不够就把答案加一,边读边处理即可。时间复杂度
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-07-03 11:23
# update_at: 2026-07-03 11:23
import sys
def solve() -> None:
data = iter(map(int, sys.stdin.buffer.read().split()))
stock = next(data, 0) # 药房当前剩余库存
patients = next(data, 0) # 取药人数
rejected = 0
for amount in data: # 按时间顺序处理每个病人的取药请求
if stock >= amount: # 库存足够,发药并扣减库存
stock -= amount
else: # 库存不足,拒绝该病人
rejected += 1
print(rejected)
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 00:21
* update_at: 2026-10-05 00:21
*/
#include <cstdio>
typedef long long ll;
ll m; // 每天开始时的药品库存总量
ll n; // 这一天前来取药的病人数
ll rejectCnt; // 没有取上药的病人数(答案)
int main() {
scanf("%lld", &m);
scanf("%lld", &n);
for (ll i = 1; i <= n; ++i) {
ll a; // 当前病人希望取走的药品数量
scanf("%lld", &a);
if (m >= a) // 库存足够,发药并扣减库存
m -= a;
else // 库存不足,拒绝该病人
++rejectCnt;
}
printf("%lld\n", rejectCnt);
return 0;
}