HNUST OJ 2295 嘉嘉的队伍配置

46 篇文章 23 订阅

问题 B: 嘉嘉的队伍配置
时间限制: 1 Sec  内存限制: 128 MB

题目描述
「当你重新踏上旅途之后,一定要记得旅途本身的意义。
   提瓦特的飞鸟、诗和城邦,女皇、愚人和怪物……都是你旅途的一部分。
   终点并不意味着一切,在抵达终点之前,用你的眼睛,多多观察这个世界吧……」


      嘉嘉最近迷上了原神这款游戏,不仅是因为可以享受精彩的剧情,同时还可以养成自己喜爱的角色,挑战许多奖励丰厚的怪物副本。为了通过困难的副本,他每天都在培养游戏中的角色,把他们变得更强。嘉嘉费劲心思培养这么多角色的目的,是为了组建出许多支强力的队伍,这样就可以轻松通过不同类型的困难副本。 
      在原神这款游戏中,一支队伍的最大角色人数为4。我们认定,一个角色的队伍定位可以简单地分为以下两种:输出、辅助。而且一个角色有且只有一种队伍定位。 
在嘉嘉眼里,要配置一支“强力的队伍”,必须要同时满足以下三个条件:
1、队伍中的角色人数为4,即达到队伍的最大人数
2、队伍中至少要拥有一位输出角色
3、队伍中至少要拥有一位辅助角色
也就是说,队伍中的4位角色不能均为输出角色,或者均为辅助角色,这是非常不合理的一支队伍。故一支合理的队伍,必须要至少包含一位输出角色和一位辅助角色。
如下图所示: 

       在日复一日的培养下,现在嘉嘉已经拥有了n位输出角色和m位辅助角色,而且每位角色最多只能加入一个队伍。现在他想配置尽可能多的“强力的队伍”,你能告诉他最多能配置多少支“强力的队伍”吗? 

输入
第一行包含一个数字T(1≤T≤106)
接下来T行,每一行包括两个数字n和m,表示有n位输出角色和m位辅助角色(0≤n,m≤109)。

输出
每组测试数据输出一行,表示最大配置的队伍数。

样例输入
3
3 5
100  200
114514  1919810

样例输出
2
75
114514

思路

分类讨论  咱先令n >= m

当 n >= 3m 时 易知  最大队伍数量就是 m

当 3m > n > m 时 我们先从 n 和 m 中 各自取出  \frac{m}{2}*2(向下取整) 组成  \frac{m}{4}  支队伍(每种类型 各两种) , 此时剩下 n - m 个同种的角色 假设 n - m = 4 就可以分成两组 每组有两个 然后再从组好的队伍中拆散一组队伍,合并到这两组队伍中,这样就有 \frac{m}{4} - 1 组每种角色各占2名的队伍 和 2 组角色 1 : 3 的队伍 。总和就是  \frac{m}{4} + 1  支队伍 。 当 n - m >= 4 时 , 就需要拆散 \frac{n-m}{4}(向下取整) 组队伍 这样就有 \frac{m}{4} - \frac{n-m}{4} 组每种角色各占2名的队伍 和 \frac{n-m}{2}组角色 1 : 3 的队伍。总和就是 \frac{n+m}{4}支队伍。

当 n = m 时 易知 最大队伍数量是 \frac{m}{2}

综上所述 

Ans = \left\{\begin{matrix} m& n >= 3m\\ \frac{n+m}{4}& 3m > n >= m \end{matrix}\right.

采用scanf和printf而不用cin和cout是为了避免时间超限

 

#include <iostream>
#include <cstdio>

using namespace std;
   
int main()
{
    int T;
    int n,m,temp,ans=0,flag;
    scanf("%d",&T);
    for (int i = 0 ; i < T ; i++) {
        scanf("%d %d",&n,&m);
        ans=0;
        flag = 1 ;
        if (n < m) {
            temp = n ;
            n = m ;
            m = temp ;
        }
        if (n == 0 || m == 0) {
            ans = 0 ;
        } else if (n >= 3*m) {
            ans = m ;
        } else {
            ans = (n+m)/4 ;
        }
        printf("%d\n",ans);
    }
    return 0;
}
/**************************************************************
    Problem: 2295
    User: 21XXXXXXXX
    Language: C++
    Result: 正确
    Time:403 ms
    Memory:2024 kb
****************************************************************/

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值