题目:
a[i]表示a在i这个阶段的分数,b[i]表示b在i这个阶段的分数
现在定义一个人在n这个阶段的得分为从n个分数中取出 n -n / 4 个最大的分数相加
问在n这个阶段是否第一个人的得分大于第二个人的得分,如果可以输出0
如果不行 输出最少加几个阶段使得第一个人的得分大于等于第二个人的得分
//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
int main()
{
int t;
cin >> t;
while (t--)
{
int a[100005], b[100005];
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
sort(a, a + n);
sort(b, b + n);
int suma = 0, sumb = 0;
for (int i = n/4; i < n; i++)//n/4到n-1
{
suma += a[i];
}
for (int i = n/4; i < n; i++)//0到 n-n/4
{
sumb += b[i];
}
int n1 = n / 4, n2 = n / 4 - 1;
if (suma >= sumb)
{
cout << 0 << endl;
}
else
{
int ans = 0;
while (suma < sumb)
{
ans++;
suma += 100;
if ((n+ans)%4 == 0)//如果又要减1
{
if (n2 < n )//n2减去最小的
{
suma -= a[n1];
n1++;
}
else//都是100时
{
suma -= 100;
}
}
else//b加上剩下的最大的b
{
if (n2 >= 0)
{
sumb += b[n2];
n2--;
}
}
}
cout << ans << endl;
}
}
}