C.Kevin的抱团游戏
思路:当k是偶数时一定可以全由女生构成或偶数个男生和女生构成所以可以假设所有的男生都参与了,(n + 2* m) % k得到如果是奇数则说明有一个男生和若干个女生(优先使用男生)如果得到得是偶数就全当女生。
当k是奇数时肯定是奇数个男生和若干个女生也就是每组都需要一个男生
之所以要分开是因为当k为奇数时可能会把一个女生分到两个组
#include<bits/stdc++.h>
#define Max 0x7fffffff
#define LL long long
#define ULL unsigned long long
#define N 2000005
#define int long long
int mod = 65536;
using namespace std;
signed main() {
int T; scanf("%lld", &T);
while (T--) {
int n, m, k, ans = 0; scanf("%lld%lld%lld", &n, &m, &k);
if (k == 1)ans = m;
else {
int left, p;//left是剩余人数,p是可以分成多少组
if (k % 2) {
p = min(n, (n + 2 * m) / k);//因为是奇数每组最少一个男生也就是n组,(n + 2 * m) / k是计算组数的
left = (n + 2 * m) - p * k;//剩余人数计算
if (left % 2) {//如果是奇数就一定是有一个男生是多余的
ans++;
left--;
}
}
else {
left = (n + 2 * m) % k;
if (left % 2) {
left--;
ans++;
}
}
ans += min(left / 2, m) + max(0ll, left - 2 * m);//由于left一定是偶数,所以前一部分是计算剩余女生的数量
//如果所有女生都满足不了剩余人数就用女生补,所以后一部分是计算剩余男生数量
}
printf("%lld\n", ans);
}
}