这个题还是比较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;
}
02-14 01:41