2016 ACM/ICPC Dalian Online-1006 Football Games

来源:互联网 发布:sql insert into 语法 编辑:程序博客网 时间:2024/06/06 01:13

题目: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;}


  • 0 0
    原创粉丝点击