社区讨论
求代码,玄关
学术版参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjof04g
- 此快照首次捕获于
- 2025/11/04 05:52 4 个月前
- 此快照最后确认于
- 2025/11/04 05:52 4 个月前
题目描述
小明有N个好朋友(编号从1到N),他们之间有一些糖果债务。有的朋友欠小明糖果,有的小明欠他们糖果。每个朋友的家都在一条直路上,第i个朋友的家距离小明的家i米远。小明希望把所有债务结清:从欠他糖果的朋友那里拿回糖果,并且还给那些他欠糖果的朋友。
小明从自己家出发(位置0米),一开始手里没有糖果。他沿着这条路行走,可以随时从欠他糖果的朋友那里拿走所有应得的糖果,也可以在他手上有足够糖果时,还给那些他欠糖果的朋友。最后,小明必须走到最后一个朋友的家(位置N米)完成整个旅程。
任务: 计算小明完成所有糖果交换需要走的最短距离。
输入格式:
第一行:朋友的数量N(1 ≤ N ≤ 100,000)。
接下来N行:第i行是一个整数D_iD
i
(|D_i|\leq1000∣D
i
∣≤1000),表示第i个朋友和小明的糖果债务关系:
如果D_iD
i
0:朋友欠小明D_iD i 颗糖果。 如果D_iD i < 0:小明欠朋友D_iD i 颗糖果(需要用|D_i|∣D i ∣颗糖果还债)。 输出格式: 一个整数,表示小明需要走的最短距离(单位:米),数据保证债务一定能还完。
示例: 输入:
5
100
-200
250
-200
200
输出:
9
解释:
小明从家(0米)走到1号朋友家(1米),拿到100颗糖果。
走到3号朋友家(3米),拿到250颗糖果,现在共有350颗。
返回2号朋友家(2米),还200颗糖果,剩余150颗。
走到5号朋友家(5米),拿到200颗糖果,共有350颗。
返回4号朋友家(4米),还200颗糖果,剩余150颗。
最后走到5号朋友家(5米),结束。 总行走距离:0 → 1 → 3 → 2 → 5 → 4 → 5,共9米。
数据范围
30%数据,n<=100
100%数据,n<=100,000
求代码
回复
共 1 条回复,欢迎继续交流。
正在加载回复...