NC15564. Wasserstein Distance
描述
左图为第一堆泥土的初始形态,右图为第二堆泥土的初始形态,颜色代表了一种可行的移动方案,使得第一堆泥土的形态变成第二堆泥土的形态
输入描述
输入测试组数T,每组测试数据,第一行输入n,1<=n<=100000,紧接着输入两行,每行n个整数,前一行为a1, a2,…,an,后一行为b1,b2,…,bn.其中0<=ai,bi<=100000,1<=i<=n,数据保证
输出描述
对于每组数据,输出一行,将a土堆的形态变成b土堆的形态所需要花费的最小体力
示例1
输入:
2 3 0 0 9 0 2 7 3 1 7 6 6 6 2
输出:
2 9
C++11(clang++ 3.9) 解法, 执行用时: 356ms, 内存消耗: 1132K, 提交时间: 2018-04-15 13:54:51
#include <cstdio> const int mn=1e5+5; int a[mn],b[mn]; int main(){ int n,T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); long long o=0,x=0; for(int i=1;i<=n;i++){ scanf("%d",&b[i]); x+=a[i]-b[i]; if(x>0) o+=x; else o-=x; } printf("%lld\n",o); } return 0; }
Python3(3.5.2) 解法, 执行用时: 1462ms, 内存消耗: 42680K, 提交时间: 2018-04-20 15:46:19
rd = lambda: map(int, input().split()) t = int(input()) for _ in range(t): n = int(input()) d, r = 0, 0 a, b = rd(), rd() for i in range(n): d += next(a) - next(b) r += abs(d) print(r)