【水题】Codeforce 1283B Candies Division

与上一道题一样,早起的水题醒盹。

一、题目大意

题目的大致意思是,Santa要分糖,总共有n块糖,要分给k个小朋友,但要求分糖要满足以下条件:(设分完糖后小朋友得到最多糖的有b块,最少糖的有a块)

  • b - a ≤ 1
  • 糖数等于a+1的小朋友不能超过 floor(k/2) 个。其中 floor(k/2)为k/2向下取整。

求在满足这样条件的情况下,Santa最多可以分出去多少块糖。

二、题目思路以及AC代码

这题也就是一个数学题,并不涉及数据结构等。

考虑要如何进行分糖,因为最大值比最小值只能多1个,所以我们可以考虑先按照floor(n/k)进行均分,然后再给一部分小朋友多一块糖,这就满足了第一个要求,但为了满足第二个要求,如果均分之后剩下的糖果大于floor(k/2),那么则只能再分出floor(k/2)块。

下面给出AC代码:

/*
 * Codeforce 1283B
 * @ Author:    Johnson
 * @ Date:      2019.12.30
 */

#include <iostream>
#include <algorithm>
using namespace std;

int main() {

    int T;
    cin >> T;

    while(T--) {
        int n, k;
        cin >> n >> k;

        int res = 0;
        if (n%k == 0) res = n;
        else {
            int a = static_cast<int>(n / k);
            res = a * k + min(static_cast<int>(k / 2), n % k);
        }

        cout << res << endl;
    }

    return 0;
}

如果有问题,欢迎大家指正!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值