由题意可知,当 时(X,Y,Z可排列组合),则游戏结束。可转换为求当有
时,可取的最大个数。故可以创造数组
,求去最多个 w[i] 且
的所以情况的最大值。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N], b[N], c[N];
int work(int a[], int b[], int c[])
{
static int w[N];
for (int i = 1; i <= n; ++ i)
w[i] = a[i] - b[i] - c[i];
sort(w + 1, w + n + 1);
reverse(w + 1, w + n + 1);
int ans = -1;
long long sum = 0;
for (int i = 1; i <= n; ++ i)
{
sum = sum + w[i];
if (sum > 0) ans = i;
else break;
}
return 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]);
for (int i = 1; i <= n; ++ i)
scanf("%d", &c[i]);
int ans = max({work(a, b, c), work(b, a, c), work(c, a, b)});
cout << ans << endl;
return 0;
}