常州测试day1:tennis

来源:互联网 发布:mac终端路径 编辑:程序博客网 时间:2024/04/27 23:31

这里写图片描述


【分析】
贪心,先把场次大的排到前面,然后让他和次大及次次大…的选手之间比赛,然后进行模拟。比完之后再次暴力排序找最大值比较。


【代码】

//4.tennis#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int n,sum;int a[1001],du[1001],ans[1001][1001];bool flag=0;inline bool comp(const int &x,const int &y) {return x>y;}inline void print(){    int i,j;//  fo(i,1,n) sort(ans[i]+1,ans[i]+ans[i][0]+1);    printf("SCHEDULE\n");//  fo(i,1,n)//  {//      fo(j,1,ans[i][0])//        printf("%d ",ans[i][j]);//      printf("\n");//  }}int main(){    freopen("tennis.in","r",stdin);    freopen("tennis.out","w",stdout);    int i,j;    scanf("%d",&n);    fo(i,1,n)      scanf("%d",&du[i]);    fo(i,1,n)    {        sort(du+i,du+n+1,comp);        if(i+du[i]>n) {printf("NO SCHEDULE\n");return 0;}        int x=i+du[i];        fo(j,i+1,x)        {            ans[i][++ans[i][0]]=j;            ans[j][++ans[j][0]]=i;            du[i]--,du[j]--;            if(du[i]<0 || du[j]<0) {printf("NO SCHEDULE\n");return 0;}        }    }    print();    return 0;}
1 0