因为 \(\{a_n\},\{b_n\}\) 单调不下降,即都已经排好序,直接从小到大依次比较就行了。
我们可以考虑先求出所有的气球数,减去不能派发的气球数,得出能派发的气球数。
当 \(b_i > a_i\) 时,即分发的气球有多的时,需要从气球总和中减去多余的气球,具体可以见代码。
#include<bits/stdc++.h> using namespace std; int n, a[100005], b[100005], ans; int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); for(int i = 1; i <= n; i++) scanf("%d", &b[i]), ans += b[i]; for(int i = 1; i <= n; i++) if(b[i] > a[i]) ans -= b[i] - a[i]; printf("%d\n", ans); return 0; }