題目:空調
題目鏈接:https://www.acwing.com/problem/content/description/4265/
思路:
?? ?對希望溫度與實際溫度做差,再對這個做差數組做差分。我們的每次操作等價于在差分數組中選一個數加一或者選兩個數一個加一,一個減一。找出差分數組中正數和和負數和中絕對值大的那個就行。
代碼:
#include<bits/stdc++.h>using namespace std;using ll = long long;
const ll N = 100005;
const ll mod = 1e9 + 7;
const int maxn = 2005;
int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}int p[N];
int t[N];
int fnt[N];
int subs[N];void solve() {int n; cin >> n;for (int i = 1; i <= n; i++) {cin >> p[i];}for (int i = 1; i <= n; i++) {cin >> t[i];}for (int i = 1; i <= n; i++) {subs[i] = p[i] - t[i];}for (int i = 1; i <= n; i++) {fnt[i] = subs[i] - subs[i - 1];}int sump = 0, sumn = 0;for (int i = 1; i <= n; i++) {if (fnt[i] > 0)sump += fnt[i];elsesumn += -fnt[i];}cout << max(sump, sumn) << '\n';
}signed main() {ios::sync_with_stdio(false);cin.tie(0);std::cout.tie(0);int t = 1; //cin >> t;while (t--)solve();return 0;
}