列表

详情


NC205919. 港口

描述

港口有n堆货物,他们的重量分别为w1,w2,...wn,每堆货物的重量不一定相同。吊车师傅每次操作可以使任意第i堆到第j堆的货物都增加一个重量或者减少一个重量。请问吊车师傅最少需要执行几次操作可以使n堆货物重量都相同。

输入描述

第一行输入正整数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));
}

上一题