对局匹配

news/2025/1/31 9:22:35/

小Hi开发了一个在线玩斗地主的游戏平台。现在平台上有N名用户正在寻找对局,其中第i名用户的积分是Ai。  

小Hi希望自己的平台可以自动将这N名用户匹配成尽量多的3人牌局。同时他希望一局中的3名用户两两之间的积分差不超过K。  

你能帮小Hi实现这个自动对局匹配的算法吗?  

假设现在正有7人在寻找对局,积分分别是[30, 31, 30, 34, 33, 32, 34]并且K = 1,这时最多可以匹配出2局:[30, 31, 30]和[34, 33, 34]。  

Input

第一行包含两个整数,N和K。  (1 ≤ N ≤ 100000, 1 ≤ K ≤ 100000)  

第二行包含N整数Ai。(0 ≤ Ai ≤ 100000)

Output

一个整数表示最多能匹配出的对局数量。

Sample Input
7 2  
30 31 30 34 33 32 34
Sample Output
2

题目的关键是先排序,因为你总会担心,当一个人可以加入多个队时,应该怎么选择,所以要先排序,这样序列才不会混乱,否则如果不排序就直接找

6 1

31 32 31 32 30 30这个样例可能过不了

一排序更加相近的数就会组在一起了,这很关键!

并且排完序后两两之间的差值只要最大的和最小的满足就ok了,我开了结构体里面有个fou变量来表示当前这个数是否已被组队.当全部组队完成后把这三个玩家的fou置为true,表示已经组队成功


#include <bits/stdc++.h>
using namespace std;
const int inf = 1e5 + 10;
struct node{
    int val;
    bool fou;
}th[inf];
bool tmp(node x, node y)
{
    return x.val < y.val;
}
int main()
{
    int n, ans = 0,k, tot = 1;
    scanf("%d %d", &n, &k);
    for(int i = 0; i < n; i ++){
        scanf("%d", &th[i].val);
        th[i].fou = false;
    }
    sort(th, th + n, tmp);
    int xu[3];
    for(int i = 0; i < n; i ++){
        if(th[i].fou) continue;
        xu[0] = i;
        for(int j = i + 1; j < n; j ++){
            if(abs(th[i].val - th[j].val) <= k){
                xu[tot] = j;
                tot ++;
            }else {
                tot = 1;
                break;
            }
            if(tot == 3){
                tot = 1;
                ans ++;
                for(int z = 0; z < 3; z ++){
                    th[xu[z]].fou = true;
                }
                break;
            }
        }
    }
    cout << ans << endl;
    return 0;
}


http://www.ppmy.cn/news/793577.html

相关文章

LOL中那些不可错过的精彩对局!!!

没想到LOL已经陪伴着我们走过了七个年头&#xff0c;这七个年头&#xff0c;小魔在看LOL视频方面可以说是超出同龄人了&#xff0c;从解说小苍制作的寒冰视频的时间开始&#xff0c;一直到现在&#xff0c;而且小魔也经常看其他很多大型主播&#xff0c;因此期间发现了许多精彩…

对局记录一

2006年11月12日弈于大连 五七炮弃双兵对反宫马 1. 炮二平五 马&#xff12;进&#xff13; 2. 马二进三 炮&#xff18;平&#xff16; 3. 车一平二 马&#xff18;进&#xff17; 4. 兵三进一 卒&#xff13;进&#xff11; 5. 马八进九 象&#xff17;进&#…

你玩的英雄在比赛中发挥如何呢?

前言 小编喜欢玩王者荣耀&#xff0c;但有点菜&#xff0c;所以想了解一下近半年王者荣耀所有英雄的赛事数据&#xff0c;看看自己喜欢玩的英雄在比赛中到底是个什么水平&#xff0c;以及热度前十的英雄是哪些&#xff0c;从中挑选几个适合的来练练。 数据来自王者荣耀官方网站…

游戏智能中的AI——从多角色博弈到平行博弈

“数据猿年度重磅活动预告&#xff1a;2020年度金猿策划活动&#xff08;金猿榜单发布金猿奖杯颁发&#xff09;即将推出&#xff0c;尽情咨询期待&#xff01; 大数据产业创新服务媒体 ——聚焦数据 改变商业 本文作者&#xff1a;沈宇, 韩金朋, 李灵犀, 王飞跃 摘要&#xf…

打开catia界面全是白色怎么办_英雄联盟提示对局仍在进行中进不去游戏怎么办...

我们在玩英雄联盟这款游戏时偶尔会出现选完英雄后卡在“对局正在进行中”这个界面这种情况&#xff0c;等了几分钟也不出现游戏加载界面。 卡在“游戏正在进行中”界面 一般的做法是关掉游戏客户端重新输入密码登陆。如果电脑配置较低&#xff0c;可能需要几分钟时间重新进入游…

大白话总结类《王者荣耀》等MOBA游戏中的网络同步机制

案例游戏&#xff1a; 《英雄联盟》 《王者荣耀》等PVP游戏 实际解决方案&#xff1a; 同步机制&#xff1a;不锁步的帧同步 网络&#xff1a;传输层的UDP配合应用层的可靠性检验 以下从问题出发讨论解决方案。 主要问题&#xff1a; 1. 性能 1&#xff09; 服务端性能&a…

CSGO 查找到一场比赛,但是您未能加入。您已经从对战匹配队列中移除

出现问题&#xff1a; 验证游戏是否真的是完整的 解决方案一、&#xff08;有效 2020-05-03&#xff09;、 无法接受比赛与游戏无关&#xff0c;是因为无法打开STEAM社区&#xff0c; 解决方案二、(已经失效2020-05-03)、 1、重新启动游戏 2、打开控制台 3、代码&#xf…

MATLAB算法实战应用案例精讲-【数模应用】MSE均方误差损失函数(最终篇)

目录 几个高频面试题目 神经网络损失函数中怎样选择交叉熵和MSE,两者区别是什么?