HDU5873:Football Games

题目链接;

Football Games

分析:

先将分数排序,然后

设当前队编号为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 }
View Code
原文地址:https://www.cnblogs.com/chendl111/p/5865111.html