由题目规律可以知道,当下标为奇数时,则符号为正,反之为负。思路是题目中说可以进行一次操作,既交换两个数的位置。首先将数组所有元素保证为正数,然后计算出不进行操作此时的珠宝和sum的值。按题目要求我们需要sum的值达到最大,则分别找到奇数中的最小值,和偶数中的最大值,将这两个值进行交换来达到目的。然后新的珠宝和asum可以表示为sum+2max-2min;然后再去比较sum和asum的大小,输出最大值即可。
此处要注意long long 因为Ai的值可以达到十的正负九次方。
下面是代码示例:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll a[N],b[N];
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]<0) a[i]=-a[i];
}
int min=a[1],max=a[2];
ll sum=0,asum;
for(int i=1;i<=n;i++)
{
if(i%2){
if(min>a[i])
{
min=a[i];
}
sum+=a[i];
}
else{
if(max<a[i])
{
max=a[i];
}
sum-=a[i];
}
}
asum=sum+2*max-2*min;
if(asum>sum) cout<<asum;
else cout<<sum;
return 0;
}
我是小蒟蒻,浅看以下当个乐子吧