题目链接;
分析:
先将分数排序,然后
设当前队编号为p,设个指针为p+1,然后
p>1,每次p-=2,指针右移一位
p==1,指针指向的队-=1
p==0,从指针开始到n,都减去2
如果出现一个数小于0,判错,
如果最后一个数非0,盘错
其他判对
(如有反例请指正)
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <bitset>
using namespace std; #define LL long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define Rof(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
#define rek(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--)
#define mem(a,b) memset(a,b,sizeof(a))
#define cpy(a,b) memcpy(a,b,sizeof(b))
int t,n,i,a[];
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&t)==)
{
while(t--)
{
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%d",a+i);
sort(a+,a++n);
for(i=;i<=n;++i)
{
if(a[i]<) {
puts("F");goto l;
}
int ans=i+;
while(a[i]>&&ans<=n)
{
a[i]-=;ans++;
}
if(a[i]>) {
puts("F");goto l;
}
else if(a[i]==)
{
a[ans++]-=;
}
for(int j=ans;j<=n;++j) a[j]-=;
}
puts("T");
l:;
}
}
return ;
}