2016 ACM/ICPC Dalian Online-1006 Football Games

題目:n支隊伍兩兩比賽,贏2分,平1分,輸0分

給出n支隊伍的得分信息,判斷是否合法

題解:Landau's Theorem

當得分信息滿足以下條件時,合法


{\displaystyle 0\leq s_{1}\leq s_{2}\leq \cdots \leq s_{n}}
0\leq s_{1}\leq s_{2}\leq \cdots \leq s_{n} {\displaystyle s_{1}+s_{2}+\cdots +s_{i}\geq {i \choose 2},{\mbox{for }}i=1,2,\cdots ,n-1}s_{1}+s_{2}+\cdots +s_{i}\geq {i \choose 2},{\mbox{for }}i=1,2,\cdots ,n-1 {\displaystyle s_{1}+s_{2}+\cdots +s_{n}={n \choose 2}.}s_{1}+s_{2}+\cdots +s_{n}={n \choose 2}.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>

using namespace std;

const int N=20000+5;
int n,a[N];
void work()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)scanf("%d",&a[i]);
    sort(a,a+n);
    int sum=0;
    for (int i=0;i<n-1;i++){
        sum+=a[i];
        if (sum<i*(i+1)){puts("F");return ;}
    }
    if (sum+a[n-1]==n*(n-1))puts("T");
    else puts("F");
}
int main()
{
    int Case;
    while (scanf("%d",&Case)!=EOF){
        while (Case--)work();
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章