【Nowcoder 上海五校赛】Wasserstein Distance

题目描述

最近对抗生成网络(GAN)很火,其中有一种变体WGAN,引入了一种新的距离来提高生成图片的质量。这个距离就是Wasserstein距离,又名铲土距离。

这个问题可以描述如下:

有两堆泥土,每一堆有n个位置,标号从1~n。第一堆泥土的第i个位置有ai克泥土,第二堆泥土的第i个位置有bi克泥土。小埃可以在第一堆泥土中任意移挪动泥土,具体地从第i个位置移动k克泥土到第j个位置,但是会消耗的体力。小埃的最终目的是通过在第一堆中挪动泥土,使得第一堆泥土最终的形态和第二堆相同,也就是ai=bi (1<=i<=n), 但是要求所花费的体力最小

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

输入描述:

输入测试组数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

题解

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

#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;
}

原文地址:https://www.cnblogs.com/kannyi/p/8855382.html

时间: 2024-10-29 11:52:53

【Nowcoder 上海五校赛】Wasserstein Distance的相关文章

【Nowcoder 上海五校赛】二数

题目描述: 我们把十进制下每一位都是偶数的数字叫做"二数". 小埃表示自己很聪明,最近他不仅能够从小数到大:2,3,4,5....,也学会了从大数到小:100,99,98...,他想知道从一个数开始数最少的数就得到一个二数.但是聪明的小森已经偷偷在心里算好了小埃会数到哪个二数,请你求出他要数到哪个数吧. 换句话说,给定一个十进制下最多105位的数字,请你求出和这个数字的差的绝对值最小的二数,若答案不唯一,输出最小的那个. 也就是说,给定数字n,求出m,使得abs(n-m)最小且m[i]

上海五校赛 密码破解

密码破解 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:04   时间限制: 1000ms   内存限制: 128M 描述 近日来勒索病毒的事件频繁发生,小Y对它的加密原理非常感兴趣,研究了一番相关知识之后,他就来给你看他的加密程序,并给你一段密文,和你炫耀说就算把程序给你看你也破解不出来. 你扫了一眼代码发现加密的公式为b=a e %m  ,其中e  是质数. 进一步分析发现m=p∗q  ,p  和q  都为质数,p!=q  , 作为一个计算机高手,你早

上海五校赛 零件组装

零件组装 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:04   时间限制: 1000ms   内存限制: 128M 描述 现有n  个零件,小Y花费了很多时间来收集它们,现在他想把零件拼在一起,拼完就可以召唤神龙了.已知零件之间存在相邻的关系,拥有相邻关系的零件在最终的组装结果中就是相邻的,并且组装过程中每次只能通过相邻关系来组合零件.小Y每次可以选择两个零件(也可以是两个零件块,或一个零件与一个零件块)拼起来,成为一个零件块,但要求拼接时必须在两个零件

Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

题目链接 题意 : 中文题.点链接 分析 : 有道题是问你不断求前缀和后的结果 Click here 这道题问的是逆过程 分析方法雷同.可参考 Click here -------------------------------------------------------------------------------- 正着做的矩阵是一个下三角 1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 结合杨辉三角可得 C(k, 0) C(k+1, 1)      C(k, 0) C

2018上海高校金马五校赛训练日志

solve  5(A  E  F  I  L) rank  77 水题总体没有很卡,但提升的题都没有思路,实力差距还是有的. 个人感觉出了的题都是铜牌及以下的难度. A Wasserstein Distance <qj> 思路: 已知两堆的值,我求出它们的差,如果是正数,说明原始堆要挪走一部分:否则,则要从别的堆移一部分过来. 不难证明,为了使花费最小,直接从左到右扫一遍便可,这样一定最优. 两个优先队列,存下标和差值.扫一遍就过了. B 合约数 C 序列变换 D  数字游戏 E  小Y吃苹果

[第十届校赛]简单总结

这次校赛其实是抱着比较大的期望来打的,首先我是单挑,好像自从去年蓝桥杯后就没有一个人做过比赛,一般都是组队做,这次单挑,是想测测自己的水平和对节奏的把握,也有夺冠的冲动,很可惜,整体上是失败了TAT.如果一开始就稳扎稳打,说不定真的可以题数碾压.. 做完胡老师出的三个水题后,交了一发卡精度的二分,节奏就开始乱了.首先我自认为我的思路很正确,并且已经将误差降到很低了,但陆陆续续wa了7发,wa的原因自然是精度问题.大概比赛结束前2个小时,我把精度加大了一位,居然奇迹般的过了,无语..我一直以为比目

2015.4 校赛回顾

用了一下午时间重刷了一次校赛题目 不参考资料做的还是2333 第一题手速题 第二题 一开始取余运算少加了一个,WA了一发 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int i,d[20000]; string c; memset(d,0,sizeof(d)); while(cin>>c) { int n=0; for(i=0;

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

记一次校赛。。

收到的短信是11点45分签到的,比赛是12点开始,4点结束.而我的外卖竟然11点32分才到.无奈之下,随意几口,11点37分之后开始猛冲SL一楼.之后就进入了机房,找到了自己的位置,开始调试编译器..说实话,我很不习惯那键盘,用那键盘打代码速度起码下降4分之一.到了11点55分之后,一些学姐学长和工作人员都在强调一些纪律,并且准备气球(做一道题给你插上一个气球).而我的内心,已经十分的紧张了,不仅是因为那种气氛,并且我的前两次热身赛都没有很理想,经常被一道坑题卡很久很久,导致我没有去做其它的题目