问题描述:
解题思路:(思路样例从0开始赋值)
注意点:1.S需要开long long
2.需要考虑如果交换的差值(即Aj - Ai)为负数的情况。
题解:(实例代码为从1开始赋值,因此奇偶要与思路对调)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
vector<int> j, o;
using ll = long long;
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;cin >> n;
int maxo = 0, minj = 1e9;
ll sumj = 0, sumo = 0; // 需要开long long
for(int i = 1; i <= n; i++)
{
int x;cin >> x;
x = abs(x); // 绝对值函数
if(i % 2 == 0)
{
o.push_back(x);
sumo += x;
maxo = max(x, maxo);
}
else{
j.push_back(x);
sumj += x;
minj = min(minj, x);
}
}
ll ans = sumj - sumo;
if(maxo > minj)ans = ans + 2 * maxo - 2 * minj; // 考虑特殊情况
cout << ans << '\n';
return 0;
}
附:上面代码是手动算数组最值以及数组和,可以使用函数计算(vector和数组都能用):
#include<bits/stdc++.h> using namespace std; int a[10] = {1 ,4 , 7 , 2}; int main() { int x = *min_element(a, a + 4); // 最大值 cout << x << '\n'; x = *min_element(a, a + 4); // 最小值 cout << x << '\n'; x = accumulate(a, a + 10, 0LL); // 数组和,0LL是固定写法 cout << x << '\n'; return 0; }
知识点:贪心,思维