题目大意:有n个人,每个人有想吃的果子数ai,和拥有的果子数bi,几个人之间可以组成一组,使得他们总共想吃的果子数<=他们有的果子数,问最多有几组满足条件的
思路:要想组数最多,那就要每组人数最少也就是2人,所以先求出每个人拥有的和期望的差,并从小到大排序,然后让最靠左的和最靠右的也就是最小和最大的组队,如果他们两个不能组队,那就把最小的那个人舍弃掉,找左边再往右的一个人
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5;
int a[N], b[N], c[N];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
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]);
c[i] = b[i] - a[i];
}
sort(c + 1, c + n + 1);
int l = 1, r = n;
int ans = 0, sum = 0;
while (l < r)
{
if (c[l] + c[r] >= 0)
{
l++;
r--;
ans++;
}
else
{
l++;
}
}
printf("%d\n", ans);
}
return 0;
}