专栏文章

题解:P12795 [NERC 2022] Football

P12795题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miosxzp6
此快照首次捕获于
2025/12/03 00:38
3 个月前
此快照最后确认于
2025/12/03 00:38
3 个月前
查看原文

题解:P12795 [NERC 2022] Football

题意:
nn 场比赛中,踢进 aa,个球,踢丢 bb 个球。
题目要求求出最小平局数并输出一个比分列表,满足有 dd 场平局,其他比赛非平局。
主要思路: 观察可以发现平局场次的进球和失球数必须相等,即每场平局消耗的 aabb 相同。所以剩余比赛需分配剩余的 a=asum(xi)a' = a - sum(x_i)b=bsum(yi)b' = b - sum(y_i),且所有非平局比赛必须满足 xiyix_i ≠ y_i
CPP

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,a,b;
    cin>>n>>a>>b;
    
    // 单场比赛情况
    if(n==1){
        if(a==b) cout<<"1\n"<<a<<':'<<b<<"\n";
        else cout<<"0\n"<<a<<':'<<b<<"\n";
    }
    // 总进球数不足n场的情况
    else if(a+b<n){
        cout<<n-a-b<<"\n";
        for(int i=1;i<=a;i++) puts("1:0");
        for(int i=1;i<=b;i++) puts("0:1");
        for(int i=1;i<=n-a-b;i++) puts("0:0");
    }
    // 正常情况
    else{
        cout<<"0\n";
        // 无失球情况
        if(b==0){
            for(int i=1;i<n;i++) puts("1:0");
            printf("%d:0",a-n+1);
        }
        // 进球数不足n-1场
        else if(a<n-1){
            for(int i=1;i<=a;i++) puts("1:0");
            for(int i=1;i<=n-a-1;i++) puts("0:1");
            printf("0:%d",b-(n-a-1));
        }
        // 一般情况
        else{
            for(int i=1;i<n-1;i++) puts("1:0");
            printf("%d:0\n0:%d",a-(n-2),b);
        }
    }
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...