社区讨论

求代码,玄关

学术版参与者 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 条回复,欢迎继续交流。

正在加载回复...