嗯~这玩意我陷入了沉思

分组游戏
时间限制:1秒 内存限制:128M
题目描述
小可所在的班级要分组进行游戏,小可作为班长,要负责分组这个任务。
给小可的要求是:
1、每组有且只能有4位同学。
2、每组至少有一名男生和一名女生。
如果有同学没有组可分,那么会被安排玩另外的游戏。小可想知道最多能分多少组?

输入描述

第一行一个正整数t(1≤t≤10^4 ),代表有t组输入。
对于每组输入,有两个正整数a,b(0≤a,b≤10^9),分别代表有
a位男生和b位女生。

输出描述
对于每组输入,输出最多分多少组。
样例输入
6
5 5
10 1
2 3
0 0
17 2
1000000000 1000000000
样例输出
2
1
1
0
2
500000000

参考GPT和自己的思路:

根据题意,我们需要将男生和女生分组,每组必须有一名男生和一名女生,并且每组人数不能超过4人。因此我们可以按照以下思路进行分组:

  1. 先将男生和女生分别按照人数从小到大排序。
  2. 当男生和女生都不为0时,每次选择一名男生和一名女生放入一组中,直到不能再放置时停止。
  3. 如果还有剩余的男生或女生,可以将一名男生和两名女生放入一组中,或者将三名女生放入一组中,直到没有剩余为止。

最后统计能够分成的组数即可,注意有可能存在男生或女生总人数不足4人的情况,应该特判一下。下面是具体的代码实现:

t = int(input())  # 输入测试数据组数

for _ in range(t):
    a, b = map(int, input().split())  # 输入男生和女生人数

    # 按照人数从小到大排序
    if a > b:
        a, b = b, a

    # 特判男生或女生总人数不足4人的情况
    if a == 0 or a+b < 4:
        print(0)
    else:
        # 每组人数不能超过4人
        group_num = min(a, b, (a+b)//3, (a+b)//4)
        print(group_num)

运行结果与样例输出一致。

参考GPT和自己的思路:

这是一个简单的数学问题。根据题目要求,每组必须有一名男生和一名女生,那么我们可以将男生和女生的人数分别除以4,得到最多能组成多少对“男-女”组合,取其中较小值作为最多组数。即:

min(a/4, b/4)

其中“/”表示整除,因为每组必须有4名同学。若有剩余的男生或女生无法组成一个完整的“男-女”组合,则无法再分组。所以最多组数不能超过剩余的男生和女生的较小值。最后将上述值取最小值即可。

用所给的男女比例和1/3,2/2,3/1比较一下也许有用?