1 条题解

  • 0
    @ 2025-8-24 23:18:06

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar alice_c
    【此楼已隐藏】(按Ctrl+W显示隐藏信息)

    搬运于2025-08-24 23:18:06,当前版本为作者最后更新于2025-07-19 15:19:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题意

    球队参加了 nn 场比赛,已知总进球数 aa,总失球数 bb,求最少平局次数和具体方案。

    思路

    一道构造题,分类讨论:

    1. n=1n=1,只有一场比赛。我们决定不了能平局几次。直接输出比赛结果即可,如果 a=ba=b 则平局次数为 11,否则为 00

    2. a+b<na+b<n,进球数加上失球数少于比赛次数。这说明肯定有几场比赛是 0:00:0 平局。为了让平局次数尽可能少,我们让其他那些比赛为 1:01:00:10:1。最多只能有 aa1:01:0bb0:10:1,剩下 nabn-a-b 场都是 0:00:0 平局。

    3. a+bna+b≥n。肯定可以构造出一种没有平局的方案。这种情况还可以分成两种:

      1. a=0a=0b=0b=0。所有比赛都是 0:x0:x(当 b=0b=0 时是 x:0x:0),其中 x>0x>0
      2. 否则,我们先把最后两场比赛预留成 1:01:00:10:1。我们让前 n2n-2 场比赛全都变成 1:01:00:10:1,然后把剩余的进球和失球分配给最后两场比赛。

    代码

    #include <cstdio>
    int n,a,b;
    int main()
    {
        scanf("%d%d%d",&n,&a,&b);
        if(n==1){//情况一
            if(a==b) printf("1\n");
            else printf("0\n");
            printf("%d:%d",a,b);
        }
        else if(a+b<n){//情况二
            printf("%d\n",n-a-b);
            for(int i=1;i<=a;i++) printf("1:0\n");
            for(int i=1;i<=b;i++) printf("0:1\n");
            for(int i=1;i<=n-a-b;i++) printf("0:0\n");
        }
        else{//情况三
            printf("0\n");
            if(!a){
                for(int i=1;i<n;i++)
                    printf("0:1\n");
                printf("0:%d",b-(n-1));
            }
            else if(!b){
                for(int i=1;i<n;i++)
                    printf("1:0\n");
                printf("%d:0",a-(n-1));
            }
            else{
                a--,b--;//先预留 1:0 和 0:1 最后两场比赛
                for(int i=1;i<=n-2;i++){
                    if(a>0){
                        printf("1:0\n");
                        a--;
                    }
                    else{
                        printf("0:1\n");
                        b--;
                    }
                }
                printf("%d:0\n0:%d",a+1,b+1);//注意需要+1
            }
        }
    }
    

    求过qwq!

    • 1

    信息

    ID
    12522
    时间
    3000ms
    内存
    1024MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者