这个题还是比较ez的。但是我还是因为忘记清零num1,num2数组半个小时才A我透
首先考虑暴力,一个一个比较,60pts到手
T1谁只想拿60?
憨的离谱
我们可以设置数组,即num1, 来表示在 \(a\) 中比 \(a[i]\) 小的数的个数,num2同理。
再更新一遍前缀和,\(O(n)\) 扫一遍,统计答案即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int ali, bob;
int t;
int n;
int a[N], b[N];
int num1[N * 10], num2[N * 10];
int main() {
cin >> t;
while(t--) {
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
ali = bob = 0;
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]);
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for (int i = 1; i <= n; i++) {
num1[a[i]]++;
num2[b[i]]++;
}
for (int i = 1; i <= 1e6; i++) {
num1[i] = num1[i-1] + num1[i];
num2[i] = num2[i-1] + num2[i];
}
for (int i = 1; i <= n; i++) {
ali += num2[a[i]];
bob += num1[b[i]];
}
if(ali > bob) {
puts("Alice");
continue;
}
if(ali == bob) {
puts("Tie");
continue;
}
if(ali < bob) puts("Bob");
}
return 0;
}