B. Increase-Decrease-Copy
给你两个整数数组:长度为
你可以按任意顺序执行下列操作任意次数:
- 选择数组
中的任意元素,并将其增加 ; - 选择数组
中的任意元素,并将其减少 ; - 选择数组
中的任意元素,复制并将复制的元素添加到数组 的末尾。
你的任务是计算将数组
Solution
写了几次每次思路都是一样的,感觉是题目意思不清楚?细节写错了
错因:
res = min({res,abs(b[n + 1] - a[i]), abs(b[n + 1] - b[i])});
写成了res = min({abs(b[n + 1] - a[i]), abs(b[n + 1] - b[i])});
.... 注意点吧
做题时的疑问:
4
4 5 7 8
4 5 7 8 6
Q: 为什么这组数组答案是 2?
A: 1. 4578->45785 (1)->45786 (2)
#define int long long
void solve() {
int n;cin >> n;
vector<int> a(n + 1), b(n + 2);
for (int i = 1;i <= n;i++)cin >> a[i];
int ans = 1;
for (int i = 1;i <= n + 1;i++) {
cin >> b[i];
if (i <= n) {
ans += abs(a[i] - b[i]);
}
}
int res = 1e9;
for (int i = 1;i <= n;i++) {
res = min({res,abs(b[n + 1] - a[i]), abs(b[n + 1] - b[i])});
if (b[n + 1] >= min(a[i], b[i]) && b[n + 1] <= max(a[i], b[i])) {
cout << ans << '\n';return;
}
}
cout << ans + res << '\n';
}