Codeforces1399 B. Gifts Fixing(思维)

题意:

有n个物品,第i个物品有属性a(i)和b(i),
一次操作你可以将进行:
1.将某个物品的a(i)减掉1
2.将某个物品的b(i)减掉1
3.将某个物品的a(i)和b(i)都减掉1

问令a(1)=a(2)=…a(n),且b(1)=b(2)=…b(n)的最小操作次数
注意:最后a(i)不需要等于b(i)

数据范围:n<=50

解法:

傻逼了

因为操作只有减法没有加法,所以最后a(i)的值一定是所有a(i)中的最小值mia,b(i)同理。
所以对于每个物品,需要操作的次数是max(a(i)-mia,b(i)-mib),累加就是答案。

code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxm=1e5+5;
int a[maxm];
int b[maxm];
int n;
signed main(){
    int T;scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(int i=1;i<=n;i++){
            scanf("%d",&b[i]);
        }
        int mia=a[1],mib=b[1];
        for(int i=1;i<=n;i++){
            mia=min(mia,a[i]);
            mib=min(mib,b[i]);
        }
        ll ans=0;
        for(int i=1;i<=n;i++){
            ans+=max(a[i]-mia,b[i]-mib);
        }
        printf("%lld\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/107859071