ZOJ Problem Set - 3819Average Score

本文详细解析了ZOJProblemSet-3819AverageScore题目中求解学生的分数上下限的算法过程,并提供了具体的代码实现。文章深入分析了解题思路,包括数学公式推导和代码细节,旨在帮助读者理解如何通过数学方法解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZOJ Problem Set - 3819Average Score

题目链接

题目大意:给你两个班的的学生的分数(A,B班),A班有一个学生的分数没有给出。现在要求你给出这个学生分数的上下限,使得这个学生的分数满足把这个学生拿出A班放到B班,两个班的平均分都提高。

解题思路:
Sa:代表A班的学生除了要求的那种学生的总分;Sb:代表B班同学的学生的总分;
n:代表A班学生的总数; m: 代表B班同学的学生总数;
x代表该学生的分数。
满足:1.(sa + x) / n < sa/(n - 1) ; 2.(sb + x) / (m + 1) > sb / m;
得:sb/(m + 1) < x < sa/(n -1) 注意:取整的问题。

代码:

#include <cstdio>
#include <cstring>

int main () {

    int T;
    int n, m;
    int score;

    scanf ("%d", &T);
    while (T--) {

        int sum1 = 0;
        int sum2 = 0;
        scanf ("%d%d", &n, &m);
        for (int i = 0; i < n - 1; i++) {

            scanf ("%d", &score);
            sum1 += score;
        }

        for (int i = 0; i < m; i++) {

            scanf ("%d", &score);
            sum2 += score;
        }

        if (sum1 % (n - 1) == 0)
            sum1 = sum1 / (n - 1) - 1;
        else
            sum1 = sum1 / (n - 1);
        sum2 = sum2 / m + 1;

        printf ("%d %d\n", sum2, sum1);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值