大家好!我是小码匠。
今天分享的题目是标准的差分题目。
离自己的既定目标:
本周完成4道,后面2道稍后会进行分享
分类 | 算法 | 题目 |
---|---|---|
算法基础 | 前缀和 | 【第001题】题解分享:湖南省选->激光炸弹 |
算法基础 | 差分 | 【第002题】题解分享:P4552 [Poetize6] IncDec Sequence |
给定一个长度为 n 的数列
,每次可以选择一个区间[l,r],使这个区间内的数都加 1 或者都减 1。
请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。
第一行一个正整数 n 接下来 n 行,每行一个整数,第 i+1行的整数表示
。
第一行输出最少操作次数 第二行输出最终能得到多少种结果
输入 #1复制
4
1
1
2
2
输出 #1复制
1
2
对于 100% 的数据,
。
#include <bits/stdc++.h>
using namespace std;
void best_coder() {
int n;
cin >> n;
vector<long long> a(n + 1);
cin >> a[0];
long long z = 0, f = 0;
for (int i = 1; i < n; ++i) {
cin >> a[i];
long long x = a[i] - a[i - 1];
if (x > 0) {
z += x;
} else {
f += x;
}
}
f = abs(f);
cout << max(z, f) << '\n';
cout << max(z, f) - min(z, f) + 1;
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
return 0;
}
END
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有