【洛谷 P8656】[蓝桥杯 2017 国 B] 对局匹配 题解(映射+位集合+贪心算法)

[蓝桥杯 2017 国 B] 对局匹配

题目描述

小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。

小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是 K K K 的两名用户匹配在一起。如果两人分差小于或大于 K K K,系统都不会将他们匹配。

现在小明知道这个网站总共有 N N N 名用户,以及他们的积分分别是 A 1 , A 2 , ⋯ A N A_1,A_2, \cdots A_N A1,A2,AN

小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于 K K K)?

输入格式

第一行包含两个个整数 N N N K K K

第二行包含 N N N 个整数 A 1 , A 2 , ⋯ , A N A_1,A_2, \cdots, A_N A1,A2,,AN

输出格式

一个整数,代表答案。

样例 #1

样例输入 #1

10 0
1 4 2 8 5 7 1 4 2 8

样例输出 #1

6

样例 #2

样例输入 #2

10 1
2 1 1 1 1 4 4 3 4 4

样例输出 #2

8

提示

对于 30 % 30\% 30% 的数据, 1 ≤ N ≤ 10 1 \le N \le 10 1N10

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 5 1 \le N\le 10^5 1N105 0 ≤ K , A i ≤ 1 0 5 0\le K,A_i \le 10^5 0K,Ai105

时限 1 秒, 256M。蓝桥杯 2017 年第八届国赛


思路

首先从输入中读取两个整数 nk,分别表示用户数量和积分差。然后定义一个 bitset valid 和一个 map m1bitset valid 用于标记某个积分的用户是否存在,map m1 用于存储每个积分的用户数量。

接着对于每个用户,从输入中读取其积分 t,并在 map m1 中将 t 作为键,对应的值增加 1。同时,将 bitset valid 中的 t 位置为 1,表示存在积分为 t 的用户。

如果 k 等于 0,表示系统只会将积分相同的用户匹配在一起。此时,输出 valid.count(),即积分种类数,就是系统一场对局都匹配不起来的用户数量。

如果 k 不等于 0,需要将积分差恰好是 k 的两名用户匹配在一起。对于 map m1 中的每一对键值对 i,如果 valid[i.first + k] 为真并且 m1[i.first + k] 大于 0,表示存在积分差为 k 的用户。

m1[i.first] 大于或等于 m1[i.first + k] 时,积分为 i.first 的用户数量足够与积分为 i.first + k 的所有用户进行匹配。在这种情况下,积分为 i.first + k 的用户都可以找到积分差为 k 的对手,他们不是系统匹配不起来的用户。因此,将 m1[i.first + k] 置为0,表示积分为 i.first + k 的用户都已经找到了对手,他们不会被计入系统匹配不起来的用户数量。

m1[i.first] 小于 m1[i.first + k] 时,积分为 i.first 的用户数量不足以和所有积分为 i.first + k 的用户配对。在这种情况下,积分为 i.first 的所有用户都可以找到积分差距为 k 的对手,所以他们不是系统匹配不起来的用户。然而,积分为 i.first + k 的用户中,只有 m1[i.first] 个用户可以找到对手,剩下的 m1[i.first + k] - m1[i.first] 个用户找不到对手。因此,需要将 m1[i.first + k] 减去 m1[i.first],得到的结果就是无法找到对手的用户数量。

最后,遍历 map m1 中的每一对键值对 i,将 i.second 加到答案 ans 中。输出 ans,即系统一场对局都匹配不起来的用户数量。


AC代码

#include <algorithm>
#include <bitset>
#include <cmath>
#include <iostream>
#include <map>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;const int N = 1e5 + 7;
const int INF = 0x3f3f3f3f;
const ll MOD = 1e9 + 7;int n, k;
bitset<N> valid;
map<int, int> m1;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> k;for (int i = 1; i <= n; i++) {int t;cin >> t;m1[t]++;valid[t] = 1;}if (k == 0) {// 同分匹配cout << valid.count() << "\n";return 0;}for (const auto i : m1) {// cout << i.first << " " << i.second << endl;if (valid[i.first + k] && m1[i.first + k] > 0) {// 将积分差恰好是 K 的两名用户匹配在一起// cout << i.first + k << " " << m1[i.first + k] << endl;if (m1[i.first] < m1[i.first + k]) {m1[i.first + k] -= m1[i.first];} else {m1[i.first + k] = 0;}}}ll ans = 0;for (const auto i : m1) {ans += i.second;}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python网络爬虫(四):b站评论

首先来看一下采集的数据格式: 本文不对数据采集的过程做探讨,直接上代码。首先要在程序入口处bvids列表内替换成自己想要采集的视频bvid号,然后将self.cookies替换成自己的(需要字典格式),代码可以同时爬取多个视频的评论,且爬取的评论较为完整,亲测有效: im…

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片&#xff0c;再上一篇文章已经解决了&#xff0c;el-upload上传图片给SpringBoot后端,但是又发现了新的问题&#xff0c;果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述&#xff1a;回显图片需要将默认的 file-lis…

VScode使用持续更新中。。。

VScode 安装 Ubuntu18.04安装和使用VScode 使用 Vscode如何设置成中文

基于springboot大学生兼职平台管理系统(完整源码+数据库)

一、项目简介 本项目是一套基于springboot大学生兼职平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功…

基于Springboot + vue + mysql 游戏分享管理系统 (含源码)

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统架构 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 &#x1f4ac; 管理员功能需求E/R图 &#x1f4ac; 用户功能需求E/R图 &#x1f4ac; 游戏文章E/R图 &#x1f4ac; 用户E/R图 &#x1f4da; 系…

Jmeter的使用

Jmeter的使用 1.Jmeter简介 以下内容来自Jmeter中文网http://www.jmeter.com.cn/jieshao&#xff0c;很好的解释了Jmeter的作用&#xff1a; Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xf…

zabbix绑定钉钉进行通知,网页端添加JavaScript,无脑式操作

文章目录 前言一、编辑zabbix告警JavaScript脚本二、代码如下&#xff1a;编辑消息模板&#xff0c;自定义markdown格式的消息。 总结 前言 随着人工智能的不断发展&#xff0c;zabbix监控这门技术也越来越重要&#xff0c;一下进入正题。 一、编辑zabbix告警JavaScript脚本 没…

水离子雾化壁炉如何实现火焰的虚实变化?

水离子雾化壁炉通过调节水雾的密度和电子控制器的设置来实现火焰的虚实变化。具体实现方法如下&#xff1a; 调节水雾密度&#xff1a; 超声波振动器可以调节水分子的雾化效果&#xff0c;从而控制水雾的密度。增加水雾的密度会使火焰看起来更实&#xff0c;而减少水雾的密度则…

【重学C语言】四、运算符和表达式

【重学C语言】四、运算符和表达式 概念左值与右值运算符一元运算符二元运算符三元运算符 优先级结合性 基本运算符赋值运算符算术运算符复合赋值运算符位运算符应用条件和逻辑运算符条件运算符逻辑运算符逻辑短路逻辑与&#xff08;&&&#xff09;的短路行为逻辑或&…

与机器对话:ChatGPT 和 AI 语言模型的奇妙故事

原文&#xff1a;Talking to Machines: The Fascinating Story of ChatGPT and AI Language Models 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 从 ELIZA 到 ChatGPT&#xff1a;会话式人工智能的简史 会话式人工智能是人工智能&#xff08;AI&#xff09;的一个分…

vue3 ts defineProps()设置i18n无效

项目环境&#xff1a;vue3 ts element plus i18n 我想在组件中的默认值中defineProps()中设置国际化&#xff0c;本组件就是一个form表单&#xff0c;其中有查询按钮&#xff0c;及重置按钮&#xff0c;原本是写活&#xff0c;可以在调用时&#xff0c;自己设置&#xff0c…

IP地址与子网掩码

1 IP地址 1.1 IPv4与IPv6 1.2 IPv4地址详解 IPv4地址分4段&#xff0c;每段8位&#xff0c;共32位二进制数组成。 1.2.1 地址分类 这32位又被分为网络号和主机号两部分&#xff0c;根据网络号占用位数的不同&#xff0c;又可分为以下几类&#xff1a; A类地址&#xff1a;…

4.4学习总结

一.线段树概念 一.定义: 线段树是一种二叉搜索树&#xff0c;而二叉搜索树&#xff0c;首先满足二叉树&#xff0c;即每个结点最多有两颗子树&#xff0c;并且是一颗搜索树&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了一个区间&#xff0c;也可以理解成一个线…

算法(滑动窗口四)

1.串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff…

【NLP练习】中文文本分类-Pytorch实现

中文文本分类-Pytorch实现 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、准备工作 1. 任务说明 本次使用Pytorch实现中文文本分类。主要代码与文本分类代码基本一致&#xff0c;不同的是本次任务使用…

Ubuntu系统安装NVIDIA 与pytorch

#安装Ubuntu https://zhuanlan.zhihu.com/p/355314438 #安装vm tools https://blog.csdn.net/weixin_45502414/article/details/130151842 https://blog.csdn.net/weixin_59605625/article/details/128750037 若安装正常使用,显示屏字体与复制粘贴都能解决&#xff0c;如果不…

FAS-Net

感想 图的下标弄不好&#xff0c;且作者未提供代码。AAAI的质量也就这样吧

Web Component 组件库有什么优势

前言 前端目前比较主流的框架有 react&#xff0c;vuejs&#xff0c;angular 等。 我们通常去搭建组件库的时候都是基于某一种框架去搭建&#xff0c;比如 ant-design 是基于 react 搭建的UI组件库&#xff0c;而 element-plus 则是基于 vuejs 搭建的组件库。 可能你有这种体…

Vue框架介绍简介

Vue.js&#xff0c;通常简称为Vue&#xff0c;是一个用于构建用户界面的渐进式框架。它发布于2014年2月&#xff0c;由Evan You设计并开发。Vue被设计为可以自底向上逐层应用&#xff0c;这使得开发者可以根据项目的需求灵活地使用Vue。无论是构建简单的轻量级应用&#xff0c;…

Transformer的代码实现 day03(Positional Encoding)

Positional Encoding的理论部分 注意力机制是不含有位置信息&#xff0c;这也就表明&#xff1a;“我爱你”&#xff0c;“你爱我”这两者没有区别&#xff0c;而在现实世界中&#xff0c;这两者有区别。所以位置编码是在进行注意力计算之前&#xff0c;给输入加上一个位置信息…