题解:P12795 [NERC 2022] Football
题意
球队参加了
思路
一道构造题,分类讨论:
-
-
-
1. $a=0$ 或 $b=0$。所有比赛都是 $0:x$(当 $b=0$ 时是 $x:0$),其中 $x>0$。 2. 否则,我们先把最后两场比赛预留成 $1:0$ 和 $0:1$。我们让前 $n-2$ 场比赛全都变成 $1:0$ 或 $0: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!