欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Nowcoder 上海五校赛】Wasserstein Distance

程序员文章站 2022-03-25 22:25:38
题目描述 最近对抗生成网络(GAN)很火,其中有一种变体WGAN,引入了一种新的距离来提高生成图片的质量。这个距离就是Wasserstein距离,又名铲土距离。 这个问题可以描述如下: 有两堆泥土,每一堆有n个位置,标号从1~n。第一堆泥土的第i个位置有ai克泥土,第二堆泥土的第i个位置有bi克泥土 ......


题目描述

最近对抗生成网络(GAN)很火,其中有一种变体WGAN,引入了一种新的距离来提高生成图片的质量。这个距离就是Wasserstein距离,又名铲土距离。
这个问题可以描述如下:
 
有两堆泥土,每一堆有n个位置,标号从1~n。第一堆泥土的第i个位置有ai克泥土,第二堆泥土的第i个位置有bi克泥土。小埃可以在第一堆泥土中任意移挪动泥土,具体地从第i个位置移动k克泥土到第j个位置,但是会消耗【Nowcoder 上海五校赛】Wasserstein Distance的体力。小埃的最终目的是通过在第一堆中挪动泥土,使得第一堆泥土最终的形态和第二堆相同,也就是ai=bi (1<=i<=n), 但是要求所花费的体力最小

【Nowcoder 上海五校赛】Wasserstein Distance【Nowcoder 上海五校赛】Wasserstein Distance

左图为第一堆泥土的初始形态,右图为第二堆泥土的初始形态,颜色代表了一种可行的移动方案,使得第一堆泥土的形态变成第二堆泥土的形态

输入描述:

输入测试组数T,每组测试数据,第一行输入n,1<=n<=100000,紧接着输入两行,每行n个整数,前一行为a1, a2,…,an,后一行为b1,b2,…,bn.其中0<=ai,bi<=100000,1<=i<=n,数据保证 

【Nowcoder 上海五校赛】Wasserstein Distance

输出描述:

对于每组数据,输出一行,将a土堆的形态变成b土堆的形态所需要花费的最小体力

[示例1]

输入

2
3
0 0 9
0 2 7
3
1 7 6
6 6 2

输出

2
9

题解

其实就是一道推公式的题,之前在比赛的时候我们所使用的方法很麻烦,所以在这附上某位大神的做法。

#include<bits/stdc++.h> 
using namespace std;
const int M=1e5+5;
int a[M],b[M];
int main()
{
    int n,t,i;
    cin>>t;
    while(t--)
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
            
        long long s=0,x=0;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&b[i]);
            x+=a[i]-b[i];
            if(x>0)
                s+=x;
            else
                s-=x;
        }
        printf("%lld\n",s);
    }
    return 0;
}