Football Games HDU - 5873(兰道定理)

Football Games HDU - 5873

A mysterious country will hold a football world championships—Abnormal Cup, attracting football teams and fans from all around the world. This country is so mysterious that none of the information of the games will be open to the public till the end of all the matches. And finally only the score of each team will be announced.

At the first phase of the championships, teams are divided into M
groups using the single round robin rule where one and only one game will be played between each pair of teams within each group. The winner of a game scores 2 points, the loser scores 0, when the game is tied both score 1 point. The schedule of these games are unknown, only the scores of each team in each group are available.

  When those games finished, some insider revealed that there were some false scores in some groups. This has aroused great concern among the pubic, so the the Association of Credit Management (ACM) asks you to judge which groups' scores must be false. 

Input
Multiple test cases, process till end of the input.

  For each case, the first line contains a positive integers M, which is the number of groups.

The i-th of the next M lines begins with a positive integer Bi representing the number of teams in the i-th group, followed by Bi
nonnegative integers representing the score of each team in this group.

number of test cases <= 10
M<= 100
B[i]<= 20000
score of each team <= 20000

Output
For each test case, output M
lines. Output F" (without quotes) if the scores in the i-th group must be false, outputT” (without quotes) otherwise. See samples for detail.
Sample Input

2
3 0 5 1
2 1 1

Sample Output

F
T
题意:

有B支足球队,每两支队伍都要比一场,赢了得2分,输了得0分,平局双方各得1分。

每次给定B个球队的比分情况问是否合法

分析:

当时看做出来的时候感觉不明觉历,随随便便找了几个条件,看是否满足,但是总感觉还差点什么结果就过了

之后搜题解大部分又都说是思维题模拟题,但是却发现兰道定理这个奇妙的东西,恰好就是这个问题的正解

兰道定理:

兰道定理又称竞赛图定理,是一个定义在有向图上的概念,顾名思义,它可以想象成n个人两两对决,赢得向输的连边,其实就是给一副完全图的无向边定了方向。

定义一个竞赛图的比分序列(score sequence),是把竞赛图的每一个点的出度从小到大排列得到的序列。(这里相当于赢一句得1分)
一个长度为n的序列 s=(s1s2...sn),n1 s = ( s 1 ≤ s 2 ≤ . . . ≤ s n ) , n ≥ 1 ,是合法的比分序列当且仅当:

1kn,i=1ksi(k2) ∀ 1 ≤ k ≤ n , ∑ i = 1 k s i ≥ ( k 2 )

k=n k = n 时这个式子必须取等号

因此我们直接按照这个式子判断就行了,只不过这道题目赢一句得2分,因此给 (k2) ( k 2 ) 乘2就行了

code:

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 20010;
int a[MAXN];
int main(){
    int t;
    while(scanf("%d",&t) != EOF){
        while(t--){
            memset(a,0,sizeof(a));
            int n,i,sum = 0;
            bool flag = true;
            scanf("%d",&n);
            for(int i = 0; i < n; i++){
                scanf("%d",&a[i]);
                sum += a[i];
            }
            if(sum != n*(n-1)){
                flag = false;
                puts("F");
                continue;
            }
            sort(a,a+n);
            sum = 0;
            for(int i = 0; i < n-1; i++){
                sum += a[i];
                if(sum >= (i + 1) * i) continue;
                else{
                    flag = false;
                    puts("F");
                    break;
                }
            }
            if(flag) puts("T");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值