题目链接;
分析:
先将分数排序,然后
设当前队编号为p,设个指针为p+1,然后
p>1,每次p-=2,指针右移一位
p==1,指针指向的队-=1
p==0,从指针开始到n,都减去2
如果出现一个数小于0,判错,
如果最后一个数非0,盘错
其他判对
(如有反例请指正)
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <ctime> 5 #include <cmath> 6 #include <iostream> 7 #include <algorithm> 8 #include <string> 9 #include <set> 10 #include <map> 11 #include <queue> 12 #include <stack> 13 #include <vector> 14 #include <bitset> 15 using namespace std; 16 17 #define LL long long 18 #define F(i,a,b) for(int i=a;i<=b;++i) 19 #define R(i,a,b) for(int i=a;i<b;++i) 20 #define Rof(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--) 21 #define rek(i,a,b) for (int i=(a),_##i=(b); i>=_##i; i--) 22 #define mem(a,b) memset(a,b,sizeof(a)) 23 #define cpy(a,b) memcpy(a,b,sizeof(b)) 24 int t,n,i,a[20020]; 25 int main() 26 { 27 //freopen("in.txt","r",stdin); 28 while(scanf("%d",&t)==1) 29 { 30 while(t--) 31 { 32 scanf("%d",&n); 33 for(int i=1;i<=n;++i) scanf("%d",a+i); 34 sort(a+1,a+1+n); 35 for(i=1;i<=n;++i) 36 { 37 if(a[i]<0) { 38 puts("F");goto l; 39 } 40 int ans=i+1; 41 while(a[i]>1&&ans<=n) 42 { 43 a[i]-=2;ans++; 44 } 45 if(a[i]>1) { 46 puts("F");goto l; 47 } 48 else if(a[i]==1) 49 { 50 a[ans++]-=1; 51 } 52 for(int j=ans;j<=n;++j) a[j]-=2; 53 } 54 puts("T"); 55 l:; 56 } 57 } 58 return 0; 59 }