B. Increase-Decrease-Copy

给你两个整数数组:长度为 n 的数组 a 和长度为 n+1 的数组 b

你可以按任意顺序执行下列操作任意次数:

你的任务是计算将数组 a 转换为数组 b 所需的上述操作的最少次数(可能为零)。可以证明,在问题的限制条件下,这总是可能的。

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';
}