问题描述:
解题思路:(思路样例从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 longfor(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; }
知识点:贪心,思维