题目描述
牛牛有 n 个属性,第 i 个属性的初始值为 ai ,牛牛想把第 i个属性的值变为目标值 bi。
现在牛牛 2×n 种不同颜色的药丸(每种药丸都有无穷多个),吃一个药丸会产生一个效果。同种颜色的药丸效果相同,不同颜色的药丸效果不同。
每种颜色的药丸对应以下效果之一:
* 第 1 个属性值 + 1
* 第 1 个属性值 - 1
* 第 2 个属性值 + 1
* 第 2 个属性值 - 1
* ......
* 第 n 个属性值 + 1
* 第 n 个属性值 - 1
以上描述了 2×n 种效果,它们与 2×n种颜色的药丸一一对应。
开始时牛牛并不知道药丸颜色与药丸效果的对应关系。若牛牛吃一个药丸,则会获得该颜色药丸对应的效果,并且知道该颜色的药丸对应的效果。
牛牛通过吃药丸来改变自己的属性值。求在最坏的情况下,牛牛要吃多少药丸才能将所有属性从初始值变为目标值。
(若初始时初始值均等于目标值,则不需要吃药丸,输出 0)
输入描述:
第一行输入一个正整数 1≤n≤10^5,表示牛牛的属性数量。 接下来一行 n 个整数,第 i 个整数 −10^9≤ai≤10^9,−10^9≤ai≤10^9 表示牛牛第 i 个属性的初始值。 接下来一行 n个整数,第 i 个整数 −10^9≤bi≤10^9,−10^9≤bi≤10^9 表示牛牛第 i 个属性的目标值。
输出描述:
输出一个整数 m,表示在最坏的情况下,牛牛要吃多少药丸才能将所有属性从初始值变为目标值。
示例1
输入
2 1 3 1 4
输出
5
说明
在样例中,牛牛有 2 个属性值分别为 1 3,目标值分别为 1 4。 在最坏情况下: 牛牛吃的第一个胶囊使得其第一个属性值下降 1,牛牛的属性值变为:0 3。此时牛牛肯定不会再吃该颜色的药丸了。 牛牛吃的第二个胶囊使得其第二个属性值下降 1,牛牛的属性值变为:0 2。此时牛牛肯定不会再吃该颜色的药丸了。 牛牛吃的第三个胶囊使得其第一个属性值增加 1,牛牛的属性值变为:1 2。牛牛的第一个属性值以及足够,此时牛牛肯定不会再吃该颜色的药丸了。 牛牛吃的第四个胶囊使得其第二个属性值增加 1,牛牛的属性值变为:1 3。 此时牛牛可以再吃一个同上颜色的药丸,使得其第二个属性值增加 1,变为 4。 共需要 5 个药丸。
示例2
输入
3 1 1 4 5 1 4
输出
10
假设每个都是最坏的情况,与原先要达到的数值背离,再加一个等于0时候的特判,还有记得开longlong
#include<bits/stdc++.h>
using namespace std;
int a[100010],b[100010];
int main()
{
int n;
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
for(int i=1;i<=n;i++)
{
cin >> b[i];
}
bool flag=true;
for(int i=1;i<=n;i++)
{
if(a[i]!=b[i])
flag=false;
}
if(flag==false)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
sum+=abs(a[i]-b[i])+2;
}
cout<<sum;
}
else
cout<<0;
return 0;
}