正题
题目链接:http://noi.ac/contest/235/problem/227
题目大意
两个nnn长度为AAA和BBB的序列,从两个序列中各随机取一个数出来,求期望哪个序列的数大。
解题思路
总共有n∗nn*nn∗n种情况,每种情况等概率,排序用指针统计一下那边的赢得情况多即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+100;
ll T,n,a[N],b[N],Alice,Bob;
int main()
{//freopen("1.in","r",stdin);scanf("%lld",&T);while(T--){scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);for(ll i=1;i<=n;i++)scanf("%lld",&b[i]);sort(a+1,a+1+n);sort(b+1,b+1+n);ll L1=0,L2=0;Alice=0;Bob=0;for(ll i=1;i<=n;i++){while(L1<n&&a[i]>b[L1+1]) L1++;while(L2<n&&a[i]>=b[L2+1]) L2++;Alice+=L1;Bob+=n-L2;}if(Alice>Bob) printf("Alice");else if(Bob>Alice) printf("Bob");else printf("Tie");putchar('\n');}
}