首页 > 试题广场 >

操作数组

[编程题]操作数组
  • 热度指数:443 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个长度为n的数组ab(下标从1开始),你的目标是使a=b,为了完成你的目标,你可以执行以下操作任意次(也可以是0次):

  • 选择两个正整数i,j,满足1 \le i,j \le ni \not = j,使a_{i}变成a_{i} -1a_{j}变成a_{j} +1

尽管你可以执行任意次操作,但这里求的是最小操作次数。如果无论如何都不能使a = b,请报告。

输入描述:
第一行包含一个正整数n (2 \leq n \leq 10^{5})n表示数组的长度。

第二行包含n个正整数a_1,a_2,\ldots,a_n (1\le a_{i} \le 10^9)

第三行包含n个正整数b_1,b_2,\ldots,b_n (1\le b_i\le 10^9)


输出描述:
输出包含一个整数,表示最小操作次数。如果无论如何都不能使a = b,输出-1
示例1

输入

4
1 2 3 4
4 3 2 1

输出

4
 if(accumulate(a.begin(), a.end(), 0) != accumulate(b.begin(), b.end() , 0)){
        cout << -1 << '\n';
        return 0;
    }
我这么判断的,但是如果爆int了就是错的的,可以增强一下数据
发表于 2026-05-04 13:37:46 回复(0)