NC205919. 港口
描述
输入描述
第一行输入正整数n。第二行输入n个整数,第i个整数表示wi。数据范围:0 < n < 100000;
0 <= wi <= 1000000000;
输出描述
第一行输出最少操作次数。
示例1
输入:
5 0 1 1 1 0
输出:
1
C++14(g++5.4) 解法, 执行用时: 69ms, 内存消耗: 500K, 提交时间: 2020-05-25 16:05:22
#include<bits/stdc++.h> using namespace std; typedef long long ll; main(){ ll n,k,x,cnt1=0,cnt2=0; cin>>n>>k; for(ll i=1;i<n;i++){ cin>>x; if(x-k>0) cnt1+=x-k; else cnt2+=k-x; k=x; } cout<<max(cnt1,cnt2); }
C(clang 3.9) 解法, 执行用时: 35ms, 内存消耗: 1136K, 提交时间: 2020-05-25 13:54:15
#include<stdio.h> long long n,x[100010],a,b; int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++)scanf("%lld",&x[i]); for(int i=n;i>=1;i--)x[i]-=x[i-1]; for(int i=2;i<=n;i++){ if(x[i]>0)a+=x[i]; else b-=x[i]; } printf("%lld",a>b?a:b); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 27ms, 内存消耗: 1508K, 提交时间: 2020-06-29 13:28:09
#include<bits/stdc++.h> using namespace std; int main() { int i,j,k,n; long long x=0,y=0; scanf("%d",&n); for(i=0;i<n;i++,k=j) { scanf("%d",&j); if(!i)continue; if(j>k)x+=j-k; else y+=k-j; } printf("%lld\n",max(x,y)); }