题意:给你球队个数和每个球队的得分,问这组数据是否合法。其中,每个球队之间只进行一场比赛。赢的2分输的0分,平局各一分。
思路:对于个n个人的集合,总分是
n∗(n−1)/2∗2
不是这个数直接F
所以,对于,n个几何的得分情况,按顺序排好,从大往下,减去分数,如果剩下的分数少于
(n−1)∗(n−2)
那就不满足了。注意n=2的时候就好了
#include<bits/stdc++.h>
#define maxn 21111
using namespace std;
int a[maxn];
int main()
{
int m,n;
while(scanf("%d",&m)!=EOF) {
while(m--) {
scanf("%d",&n);
long long sum=0;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum!=n*(n-1)) {
printf("F\n");
continue;
}
if(n==2) {
if(a[1]+a[2]==2) {
printf("T\n");
}
else {
printf("F\n");
}
continue;
}
sort(a+1,a+n+1);
int fa=0;
for(int i=n;i>=3;i--) {
sum-=a[i];
if(sum<(i-1)*(i-2)) {
printf("F\n");
fa=1;
break;
}
}
if(fa==0) {
printf("T\n");
}
}
}
return 0;
}