NC21580. 牛牛的旅行
描述
输入描述
第一行输入一个整数n (1 ≤ n ≤ 300)
第二行输入n个元素pos[i]( 1 ≤ pos[i] ≤ 105), 表示每个人的位置
第三行输入n个元素delta[i](-105 ≤ delta[i] ≤ 105)表示每个人的需求
保证pos单调递增,delta的和非负
输出描述
输出一个整数表示最少需要花费的时间
示例1
输入:
5 3 14 15 92 101 -3 2 3 -3 1
输出:
143
说明:
总共5个人,0号人在3位置,需要3的购买量. 1号人在14位置有2的供应量. 2号人在15位置有3的供应量. 3号人在92位置有3的购买量。4号人在101位置有1的供应量,最优路线如下示例2
输入:
8 1 2 4 8 16 32 64 128 -1 -1 -1 -1 1 1 1 1
输出:
382
C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 500K, 提交时间: 2023-07-18 14:08:46
#include<bits/stdc++.h> using namespace std; int a[305],b[305],n,l,sum,ans; int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; for(int i=1;i<=n;i++){ if(sum>=0&&sum+b[i]<0)l=a[i]; if(sum<0&&sum+b[i]>=0)ans+=(a[i]-l)<<1; ans+=a[i]-a[i-1]; sum+=b[i]; } cout<<ans<<endl; return 0; }
C++ 解法, 执行用时: 4ms, 内存消耗: 452K, 提交时间: 2022-07-10 16:42:18
#include<bits/stdc++.h> using namespace std; int n,m,l,w,a[301],d[301]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>d[i]; for(int i=1;i<=n;i++) { if(w<0&&w+d[i]>=0) m+=(a[i]-l)*2; if(w>=0&&w+d[i]<0) l=a[i]; m+=a[i]-a[i-1]; w+=d[i]; } cout<<m; return 0; }
Python3 解法, 执行用时: 42ms, 内存消耗: 4600K, 提交时间: 2022-11-08 21:47:15
n=int(input()) pos=list(map(int,input().split())) delta=list(map(int,input().split())) sum=pos[n-1] tem=0 deltasum=0 for i in range(len(delta)): deltasum+=delta[i] if deltasum>=0: sum=sum+2*(pos[i]-pos[tem]) tem=i+1 print(sum)