题意:
给出多个队伍比赛,询问是否合法
思路:
对于每个i位置来说,排序后,他必定前缀和大于i*i-i,因为如果在前i个中,必定也满足两两比赛得分的关系。
这题输入是个坑啊。。直接输入T,不加while(cin>>t)就wa。。。之前多组样例都是直接走T。
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int N=200005;
typedef long long ll;
ll a[N],b[N];
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
ll sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i],sum+=a[i];
}
int ok=0;
if(n*n-n!=sum)
{
ok=1;
printf("F\n");
continue;
}
sort(a+1,a+1+n);
ll res=0;
for(int i=1;i<=n;i++)
{
res+=a[i];
if(res<i*(i-1))
{
printf("F\n");
break;
}
}
if(!ok)
printf("T\n");
}
}