与上一道题一样,早起的水题醒盹。
一、题目大意
题目的大致意思是,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;
}
如果有问题,欢迎大家指正!!!