HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem C. Team Match

简介: HDU - 2018杭电ACM集训队单人排位赛 - 2 - Problem C. Team Match

Problem C Team Match

Time Limit: 2000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 160    Accepted Submission(s): 55

Problem Description

The programming competition not only depends on the programmers, but also directed by the coaches. Mr Z is a coach who direct n players to take part in the Guangxi Province Collegiate Programming Contest. We assume that a team is consisted of 3 players whose ability is x, y, z respectively and x >= y >= z. Then the team’s total ability is 3 * x + 2 * y + 1 * z; And for a team, if its ability is not lower than the gold medal level m, the team will certainly win the gold medal. Mr Z would like to match teams to gain as many gold medals as possible, could you tell him how many gold medals it is?

Input

The first line is an integer T which indicates the case number.

And as for each case,  there will be 2 lines.

In the first line, there are 2 integers n m, which indicate the number of players, the gold medal level respectively. Please remember n is always the multiple of 3.

In the second line, there are n integers which represents everyone’s ability.

It is guaranteed that——

T is about 100.

for 100% cases, 1 <= n <= 15, 1 <= m <= 30, 1 <= a[i] <= 20.

Output

As for each case, you need to output a single line.

There should be an integer in the line which means the gold medal teams Mr Z could match.

Sample Input

2

6 18

3 3 3 4 2 2

6 7

1 1 1 1 1 1

Sample Output

2

0


解题思路:从小到大排序后,每次选择一个最小,一个最大,然后中间 a[i](i 从小到大)循环寻找合适的中间数。在还没整个数组统计完时,如果当中有一次 return false,那么就肯定有一对已经没法执行,那么选择最小的尽量靠前的3个淘汰掉,再整个重来。


AC 代码


/

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n,m,a[20];
bool solve(int x)
{
    int l=(n/3-x)*3+1, r=n, vis[20];
    mem(vis,0);
    while(l<r)
    {
        int flag=0;
        for(int i=l+1;i<r;i++)
        {
            if(!vis[i] && 3*a[r]+2*a[i]+a[l]>=m)
            {
                flag=1;
                vis[i]=1;
                break;
            }
        }
        if(!flag) return false;
        vis[l]=vis[r]=1;
        while(vis[l]) l++;
        while(vis[r]) r--;
    }
    return true;
}
int main()
{
    int T; scanf("%d",&T);
    while(T-- && ~scanf("%d%d",&n,&m))
    {
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        int ans=n/3;
        while(ans)
        {
            if(solve(ans)) break;
            else ans--;
        }
        printf("%d\n",ans);
    }
    return 0;
}
目录
相关文章
2018ICPC青岛站 D . Magic Multiplication(构造 模拟)
2018ICPC青岛站 D . Magic Multiplication(构造 模拟)
117 0
|
人工智能 Java
HDU - 2018杭电ACM集训队单人排位赛 - 4 - Problem C. Sequence
HDU - 2018杭电ACM集训队单人排位赛 - 4 - Problem C. Sequence
147 0
|
机器学习/深度学习 算法 Java
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
HDU - 2018杭电ACM集训队单人排位赛 - 3 - Problem B. Bullet
221 0
|
3天前
|
人工智能 运维 安全
|
1天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
396 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
8天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
748 109
|
2天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
168 127