三生锁链

一个小小的ACMer

牛客网contest#91 A Wasserstein Distance 贪心

题解:

1、线性扫描数组,两个数组相同下标元素不相等的就开始到数组后面去找数据来补。

2、例如a[0]<b[0],那么就从下标1开始,向后寻找a[i]>b[i]的数据来补齐,注意考虑寻找到的数据差值比较就行了

3、注意输出数据会爆int。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000+10;
int n,a[maxn],b[maxn];

void slove(){
    long long cnt = 0;
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    for(int i=0;i<n;i++) scanf("%d",&b[i]);
    for(int i=0;i<n;i++){
        if(a[i] == b[i]) continue;
        if(a[i] < b[i]){
            int j = i + 1,temp = b[i] - a[i];
            while(temp > 0 && j < n) {
                if(a[j] > b[j]){
                    int cat = min(temp,a[j] - b[j]);
                    cnt += cat * (j - i);
                    temp -= cat;
                    a[j] -= cat;
                }
                j++;
            }
        }
        else {
            int j = i + 1,temp = a[i] - b[i];
            while(temp > 0 && j < n) {
                if(b[j] > a[j]){
                    int cat = min(temp,b[j] - a[j]);
                    cnt += cat * (j - i);
                    temp -= cat;
                    a[j] += cat;
                }
                j++;
            }
        }
    }
    cout << cnt << endl;
}

int main(){
    int t;
    scanf("%d",&t);
    while(t--) slove();
    return 0;
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a912952381/article/details/79955314
文章标签: 牛客网
个人分类: nowcoder
上一篇Codeforces Round #474 D Full Binary Tree Queries 满二叉树操作
下一篇牛客网contest#91 E 小Y吃苹果 二叉树
想对作者说点什么? 我来说一句

Wasserstein距离

Adley_GAN Adley_GAN

2018-03-18 20:42:45

阅读数:179

没有更多推荐了,返回首页

关闭
关闭