Bootstrap

第 25 场 蓝桥入门赛

题目:

3.男女搭配【算法赛】 - 蓝桥云课

问题描述

一年一度的蓝桥杯大赛又要开始了!

今年,组委会突发奇想,搞了个男女搭配,干活不累的团队赛(新模式),每个参赛团队必须由两名男生和一名女生组成。

小蓝就读的家里蹲大学也是蓝桥杯的参赛院校之一。听说要举办团队赛后,他摩拳擦掌,准备大展身手。

只是,家里蹲大学的领导却突然宣布,为了鼓励学生全面发展,要从包括小蓝在内的 N 名男生和 M 名女生中,选出 K 名优秀学生,送去参加一个重要的,em...全国青少年挖掘机技能特训冬令营。这个集训的时间正好和蓝桥杯冲突,这意味着被选中的同学将无法参加蓝桥杯比赛。

这突如其来的消息,让小蓝和同学们有点措手不及。现在,大家都想知道,在送走了 K 名同学之后,家里蹲大学最多还能组建多少个团队参加蓝桥杯的团队赛。

输入格式

数据有多组。

第一行输入一个整数 T (1 ≤ T < 10),表示数据的组数。

接下来的 T 行,每行输入三个整数 N、M、K (0 ≤ N, M < 10^9, 0 ≤ K < N+M),分别表示男生人数、女生人数和需要派去参加特训的学生人数。

输出格式

对于每组数据,输出一个整数,表示最多可以组建的团队数量。

样例输入

 
2
7 3 3

样例输出

 
1

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数:312 | 总提交次数:661 | 通过率:47.2%

难度:中等 标签:思维 数字

思路:

1.我们需要先求出没有减人数的时候,可以组成最大的队伍。注意当N < 2*M 时候,t需要N/2向下取整。举例子,M = 7,N = 5 ;则t = 3. 

2.求出最大队伍后所剩余的总数allsp,如果这个allsp大于等于K,那么队伍数不变,如果allsp小于K。求出more_number = K - allsp;作为还需减去的人数。通过模拟可知,如果要保留组成最大队伍数量,那么只有减去0~3人,对队伍数才能-1。所以我们将(more_number+2)/3,向上取整。最后

t - (more_number+2)/3  就是减去人数后最大的队伍数。

代码如下:

#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
ll N,M,K,T;
int main() {
    ios::sync_with_stdio((ll)0);
    cin.tie((ll)0);
    cout.tie((ll)0);
    cin >> T;
    while(T--)
    {
        cin >> N >> M >> K;
        ll t;//当前最大组 
        if(N >= 2*M)
        t = M;
        else 
        t = N/2;
        
        ll spman,spwomen;//剩余的 
        spman = N - t*2;
        spwomen = M - t;
        ll allsp = spman + spwomen;//剩余总数
//        cout << "剩余总数:" <<allsp << '\n';
        if(K <= allsp)
        cout << t << '\n';
        else
        {
            ll more_number = K - allsp;//还需要减的人数
//            cout << "还需要减的人数" << more_number <<'\n';
            t = t - (more_number+2)/3; 
            cout << max(0LL,t) << '\n';
         } 
        }

    return 0;
}