题目描述
三国游戏
C++ 代码
#include <iostream>
#include <cmath>
using namespace std;
#define int long long
const int N = 100010;
int arr[N][3];
int A[N], B[N], C[N];
void sort(int l, int r, int index)
{
if (l >= r) return;
else
{
int i = l - 1, j = r + 1, x = arr[(l + r) / 2][index];
while (i < j)
{
do i++; while (arr[i][index] > x);
do j--; while (arr[j][index] < x);
if (i < j) swap(arr[i][index], arr[j][index]);
}
sort(l, j, index);
sort(j + 1, r, index);
}
}
signed main()
{
// 输入
int num;
scanf("%lld", &num);
for (int i = 0; i < num; ++ i) scanf("%lld",&A[i]);
for (int i = 0; i < num; ++ i) scanf("%lld",&B[i]);
for (int i = 0; i < num; ++ i) scanf("%lld",&C[i]);
// 存储
for (int i = 0; i < num; ++ i)
{
arr[i][0] = A[i] - B[i] - C[i];
arr[i][1] = B[i] - A[i] - C[i];
arr[i][2] = C[i] - B[i] - A[i];
}
// 排序
for (int i = 0; i <= 2; ++i) sort(0, num - 1, i);
// 解决
int M = -1;
for (int i = 0; i <= 2; ++i)
{
int total = 0, tmp = 0;
for (int j = 0; j < num; ++j)
{
total += arr[j][i];
if(total > 0) tmp ++;
else break;
}
if(tmp != 0) M = max(tmp, M);
}
cout << M;
return 0;
}
好厉害