美团笔试-3.18
1、捕获敌人
小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。
敌人的位置将被一个二维坐标 (x, y) 所描述。
小美有一个全屏技能,该技能能一次性将若干敌人一次性捕获。
捕获的敌人之间的横坐标的最大差值不能大于A,纵坐标的最大差值不能大于B。
现在给出所有敌人的坐标,你的任务是计算小美一次性最多能使用技能捕获多少敌人。
输入描述
第一行三个整数N,A,B,表示共有N个敌人,小美的全屏技能的参数A和参数B。
接下来N行,每行两个数字x,y,描述一个敌人所在的坐标。
1 ≤ N ≤ 500,1 ≤ A , B ≤ 1000,1 ≤ x , y ≤ 1000
输出描述
一行,一个整数表示小美使用技能单次所可以捕获的最多数量。
样例输入
3 1 1
1 1
1 2
1 3
样例输出
2
实现(55%)
本题相当于给定一个矩形区域,需要使用矩形区域框出最多数量的敌人。考虑使用循环遍历每一个节点,而后再次进行二重循环遍历剩余的每一个节点,我们需要确保一开始的节点为当前举行区域的左上角,而后统计当前区域中的敌人个数。
总结
考虑到数据量不大,可以直接构建二维矩阵用于记录每个坐标上是否有敌人,最终只需要遍历二维矩阵寻找在一个矩形区域中能够获得敌人的最大数量即可。值得注意的是,可能会出现多个敌人有着相同坐标的情况,因此不能单纯将矩阵的值设置为 1 。同时为了方便求解区间和,可以使用前缀和进行进一步优化。
int g[N][N];int main() {int n, a, b;cin >> n >> a >> b;for (int i = 1; i <= n; i++) {int x, y;cin >> x >> y;g[x][y]++;}for (int i = 1; i <= 1000; i++) {for (int j = 1; j <= 1000; j++) {g[i][j] += g[i - 1][j] + g[i][j - 1] - g[i - 1][j - 1];}}int ans = 0;for (int i = 1; i <= 1000; i++) {for (int j = 1; j <= 1000; j++) {ans = max(ans, g[i][j] - g[max(0, i - a - 1)][j] - g[i][max(0, j - b - 1)] + g[max(0, i - a - 1)][max(0, j - b - 1)]);}}cout << ans << endl;return 0;
}
2、彩带
题目描述:
小美现在有一串彩带,假定每一厘米的彩带上都是一种色彩。
因为任务的需要,小美希望从彩带上截取一段,使得彩带中的颜色数量不超过K种。
显然,这样的截取方法可能非常多。于是小美决定尽量长地截取一段。
你的任务是帮助小美截取尽量长的一段,使得这段彩带上不同的色彩数量不超过K种。
输入描述
第一行两个整数N,K,以空格分开,分别表示彩带有N厘米长,你截取的一段连续的彩带不能超过K种颜色。
接下来一行N个整数,每个整数表示一种色彩,相同的整数表示相同的色彩。
1 ≤ N , K ≤ 5000,彩带上的颜色数字介于 [ 1 , 2000 ] 之间。
输出描述
一行,一个整数,表示选取的彩带的最大长度。
样例输入
8 3
1 2 3 2 1 4 5 1
样例输出
5
实现(AC)
利用数组记录彩带上的每一种颜色,利用哈希集合控制彩带的类型以及数量。我们一次遍历每一个节点,探索从他开始最多能访问几种颜色。在探索过程中利用哈希集合判断当前颜色是否以获得并及时更新哈希表的大小,若哈希表大小超出范围则立刻终止。最终计算并更新当前的最大长度。
int main() {int n, k, res = 0;scanf("%d%d", &n, &k);vector<int> line(n);for (int i = 0; i < n; ++i) {int temp;scanf("%d", &temp);line[i] = temp;}unordered_set<int> hs;for (int i = 0; i < n; ++i) {int j = i;for (; j < n; ++j) {if (!hs.count(line[j])) {hs.insert(line[j]);}if (hs.size() > k) {break;}}res = max(res, j - i);hs.clear();}printf("%d", res);
}
3、回文串
题目描述:
现在小美获得了一个字符串。小美想要使得这个字符串是回文串。
小美找到了你。你可以将字符串中至多两个位置改为任意小写英文字符 ’a’ - ‘z’
你的任务是帮助小美在当前制约下,获得字典序最小的回文字符串。
数据保证能在题目限制下形成回文字符串。
注:回文字符串:即一个字符串从前向后和从后向前是完全一致的字符串。
例如字符串 abcba , aaaa, acca 都是回文字符串。字符串 abcd , acea 都不是回文字符串。
输入描述
一行,一个字符串。字符串中仅由小写英文字符构成。
保证字符串不会是空字符串。
字符串长度介于 [ 1 , 100000 ] 之间。
输出描述
一行,一个在题目条件限制下所可以获得的字典序最小的回文字符串。
样例输入
acca
样例输出
aaaa
实现(AC)
考虑到题目要求最多修改两个字符就能让当前字符串变成回文子串,且要求返回的回文子串应当是字典顺序最小的。我们可以使用双指针找到对应位置不相等的序号并记录下来,而后进行讨论:
- 数组大小为 0 ,所有位置都对应相等。此时我们应当使用修改两个字符的名额用于优化字符串的字典序。我们移动双指针,将最接近开头的对应位置上不为 ‘a’ 的字符修改为 ‘a’ 。
- 数组大小为 2 。值得注意的是,此时可能出现两种情况:1、有一对字符不相等且两个字符军不等于 ‘a’ ,为了字典序最小此时我们需要将两个字符都修改为 ‘a’ ;2、有一对字符不相等且有一个字符军等于 ‘a’ ,为了字典序最小此时我们需要其对应的字符都修改为 ‘a’ ,且为了不浪费修改名额,当字符串长度为奇数时我们还可以将最中间元素修改为 ‘a’ 。
- 数组大小为 4 ,有两堆字符不相等。我们将对应的两对字符取各自的最小值。
int main() {string s;cin >> s;int low = 0, high = s.size() - 1, diff = 0;vector<int> it;while (low < high) {if (s[low] != s[high]) {++diff;it.emplace_back(low);it.emplace_back(high);}++low;--high;}low = 0;high = s.size() - 1;if (it.empty()) {while (s[low] == 'a') {++low;--high;}s[low] = 'a';s[high] = 'a';} else if (it.size() == 2) {if (s.size() % 2 && (s[it[0]] == 'a' || s[it[0]] == 'a')){s[s.size() / 2] = 'a';}s[it[0]] = 'a';s[it[1]] = 'a';} else {s[it[0]] = min(s[it[0]], s[it[1]]);s[it[1]] = min(s[it[0]], s[it[1]]);s[it[2]] = min(s[it[2]], s[it[3]]);s[it[3]] = min(s[it[2]], s[it[3]]);}cout << s;
}
4、商店
题目描述:
现在商店里有N个物品,每个物品有原价和折扣价。
小美想要购买商品。小美拥有X元,一共Y张折扣券。
小美需要最大化购买商品的数量,并在所购商品数量尽量多的前提下,尽量减少花费。
你的任务是帮助小美求出最优情况下的商品购买数量和花费的钱数。
输入描述
第一行三个整数,以空格分开,分别表示N,X,Y。
接下来N行,每行两个整数,以空格分开,表示一个的原价和折扣价。
1≤N≤100, 1≤X≤5000, 1≤Y≤50,每个商品原价和折扣价均介于[1,50]之间。
输出描述
一行,两个整数,以空格分开。第一个数字表示最多买几个商品,第二个数字表示在满足商品尽量多的前提下所花费的最少的钱数。
样例输入
3 5 1
4 3
3 1
6 5
样例输出
2 5
实现(9%)
应该是 01 背包的变形,需要使用动态规划。而且考虑到优惠券,还存在一个原始价格到优惠价格之间的映射,没写完。代码参考。
int a[N],b[N];
int dp[105][5005][55],cost[105][5005][55];int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n, x, y;cin >> n >> x >> y;for (int i = 1; i <= n; i++)cin >> a[i] >> b[i];for (int i = 1; i <= n; i++) {for (int j = 1; j <= x; j++) {for (int k = 0; k <= y; k++) {dp[i][j][k] = dp[i - 1][j][k];cost[i][j][k] = cost[i - 1][j][k];if (j - a[i] >= 0) {if (1 + dp[i - 1][j - a[i]][k] > dp[i][j][k]) {dp[i][j][k] = 1 + dp[i - 1][j - a[i]][k];cost[i][j][k] = cost[i - 1][j - a[i]][k] + a[i];} else if (1 + dp[i - 1][j - a[i]][k] == dp[i][j][k])cost[i][j][k] = min(cost[i][j][k], cost[i - 1][j - a[i]][k] + a[i]);}if (j - b[i] >= 0 && k >= 1) {if (1 + dp[i - 1][j - b[i]][k - 1] > dp[i][j][k]) {dp[i][j][k] = 1 + dp[i - 1][j - b[i]][k - 1];cost[i][j][k] = cost[i - 1][j - b[i]][k - 1] + b[i];} else if (1 + dp[i - 1][j - b[i]][k - 1] == dp[i][j][k])cost[i][j][k] = min(cost[i][j][k], cost[i - 1][j - b[i]][k - 1] + b[i]);}}}}int mn = 1e9;for (int i = 1; i <= n; i++) {for (int j = 1; j <= x; j++) {for (int k = 0; k <= y; k++) {//cout<<i<<" "<<j<<" "<<k<<" "<<dp[i][j][k]<<" "<<cost[i][j][k]<<endl;if (dp[i][j][k] == dp[n][x][y])mn = min(mn, cost[i][j][k]);}}}cout << dp[n][x][y] << " " << mn << endl;return 0;
}
相关文章:

美团笔试-3.18
1、捕获敌人 小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。 敌人的位置将被一个二维坐标 (x, y) 所描述。 小美有一个全屏技能,该技能能一次性将若干敌人一次性捕获。 捕获的敌人之间的横坐标的最大差值不能大于A,纵坐标的最大差值不能大于B。 现在…...

【12】SCI易中期刊推荐——计算机信息系统(中科院4区)
🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…...

好不容易约来了一位程序员来面试,结果人家不做笔试题
感觉以后还是不要出面试题这环节好了。好不容易约来了一位程序员来面试。刚递给他一份笔试题,他一看到要做笔试题,说不做笔试题,有问题面谈就好了,搞得我有点尴尬,这位应聘者有3年多工作经验。关于程序员岗位ÿ…...

这几个过时Java技术不要再学了
Java 已经发展了近20年,极其丰富的周边框架打造了一个繁荣稳固的生态圈。 Java现在不仅仅是一门语言,而且还是一整个生态体系,实在是太庞大了,从诞生到现在,有无数的技术在不断的推出,也有很多技术在不断的…...

EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)
1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法,包含底层时序和读写的代码; (2)大部分代码是EEPROM芯片通用的,但是其中关于某些时间的要求,是和具体芯片相关的,和主控芯片和外设芯片都有关系&…...

Django4.0新特性-主要变化
Django 4.0于2021年12月正式发布,标志着Django 4.X时代的来临。参考Django 4.0 release notes | Django documentation | Django Python 兼容性 Django 4.0 将支持 Python 3.8、3.9 与 3.10。强烈推荐并且仅官方支持每个系列的最新版本。 Django 3.2.x 系列是最后…...

MySQL高级面试题整理
1. 执行流程 mysql客户端先与服务器建立连接Sql语句通过解析器形成解析树再通过预处理器形成新解析树,检查解析树是否合法通过查询优化器将其转换成执行计划,优化器找到最适合的执行计划执行器执行sql 2. MYISAM和InNoDB的区别 MYISAM:不支…...

【Java】面向对象三大基本特征
【Java】面向对象三大基本特征 1.封装 On Java 8:研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰&#x…...

蓝桥杯C++组怒刷50道真题(填空题)
🌼深夜伤感网抑云 - 南辰Music/御小兮 - 单曲 - 网易云音乐 🌼多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 18~22年真题,50题才停更,课业繁忙,有空就更,2023/3/18/23:01写下 目录 👊填…...

Shell自动化管理 for ORACLE DBA
1.自动收集每天早上9点到晚上8点之间的AWR报告。 auto_awr.sh #!/bin/bash# Set variables ORACLE_HOME/u01/app/oracle/product/12.1.0/dbhome_1 ORACLE_SIDorcl AWR_DIR/home/oracle/AWR# Set date format for file naming DATE$(date %Y%m%d%H%M%S)# Check current time - …...

Unity学习日记13(画布相关)
目录 创建画布 对画布的目标图片进行射线检测 拉锚点 UI文本框使用 按钮 按钮导航 按钮触发事件 输入框 实现单选框 下拉菜单 多选框选项加图片 创建画布 渲染模式 第一个,保持画布在最前方,画布内的内容显示优先级最高。 第二个,…...

初阶C语言:冒泡排序
冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。1.冒泡排序关于冒泡排序我们在讲…...

带头双向循环链表
在前面我们学习了单链表,发现单链表还是有一些不够方便,比如我们要尾插,需要遍历一遍然后找到它的尾,这样时间复炸度就为O(N),现在我们引入双向带头链表就很方便了,我们先看看它的结构。通过观察,我们发现一…...

C#中的DataGridView中添加按钮并操作数据
背景:最近在项目中有需求需要在DataGridView中添加“删除”、“修改”按钮,用来对数据的操作以及显示。 在DataGridView中显示需要的按钮 首先在DataGridView中添加需要的列,此列是用来存放按钮的。 然后在代码中“画”按钮。 if (e.Column…...

WEB安全 PHP基础
WEB安全 PHP基础 PHP简述 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。 在一个php文件中可以包括以下内容: PHP 文件可包含文本、HTML、…...

基础篇:07-Nacos注册中心
1.Nacos安装部署 1.1 下载安装 nacos官网提供了安装部署教程,其下载链接指向github官网,选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包:📎nacos-server-2.1.0.zip,后续我们也可能会更改为其他版本做更…...

端口镜像讲解
目录 端口类型 镜像方向 观察端口位置 端口镜像实现方式 流镜像 Vlan镜像 MAC镜像 配置端口镜像 配置本地观察端口 配置远程流镜像(基于流镜像) 端口镜像是指将经过指定端口的报文复制一份到另一个指定端口,便于业务监控和故障定位…...

图形视图框架QGraphicsScene(场景,概念)
QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用,用于在 2D 表面上可视化图形项目,例如线条、矩形、文本甚至自定义项目。 QGraphicsScene具有的功能: 提供用管理大量数据项的高速接口传播事件到每一个图形项…...

ChatGPT 拓展资料: 强化学习-SARSA算法
强化学习是一种机器学习技术,它关注的是在特定环境中,如何最大化一个智能体(agent)的累积奖励(reward)。强化学习算法会根据当前状态和环境的反馈来选择下一个动作,不断地进行试错,从而优化智能体的行为。 SARSA是一种基于强化学习的算法,它可以用于解决马尔可夫决策…...

SpringJDBC异常抽象
前言spring会将所有的常见数据库的操作异常抽象转换成他自己的异常,这些异常的基类是DataAccessException。DataAccessException是RuntimeException的子类(运行时异常),是一个无须检测的异常,不要求代码去处理这类异常SQLErrorCodeSQLExcepti…...

我在字节的这两年
前言 作为脉脉和前端技术社区的活跃分子,我比较幸运的有了诸多面试机会并最终一路升级打怪如愿来到了这里。正式入职时间为2021年1月4日,也就是元旦后的第一个工作日。对于这一天,我印象深刻。踩着2020年的尾巴接到offer,属实是过了一个快乐…...

Button(按钮)与ImageButton(图像按钮)
今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到B…...

Chrome插件开发-右键菜单开启页面编辑
开发一个执行js脚本改变页面DOM的Chrome插件,manifest_version版本为3。 Chrome插件基本知识 Chrome插件通常由以下几部分组成: manifest.json 该文件为必须项,其它文件都是可选的。该文件相当于插件的meta信息,包含manifest版…...

指针进阶(上)
内容小复习🐱: 字符指针:存放字符的数组 char arr1[10]; 整型数组:存放整型的数组 int arr2[5]; 指针数组:存放的是指针的数组 存放字符指针的数组(字符指针数组) char* arr3[5]; 存放整型指针的数组(整型指针数组) int* arr[6]; 下面进入学习了哦~&…...

Python每日一练(20230318)
目录 1. 排序链表 ★★ 2. 最长连续序列 ★★ 3. 扰乱字符串 ★★★ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 排序链表 给你链表的头结点 head ,请将其按 升序 …...

多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码
目录 摘要: 卷积神经网络(CNN)的介绍: 长短期记忆网络(LSTM)的介绍: CNN-LSTM: Matlab代码运行结果: 本文Matlab代码数据分享: 摘要: 本文使用CNN-LSTM混合神经网…...

mybatis中获取参数的两种方式:${}和#{}
目录 1.#{} 2.${} 3.总结 1.#{} 本质是占位符赋值 示例及执行结果: 结论:通过执行结果可以看到,首先对sql进行了预编译处理,然后再传入参数,有效的避免了sql注入的问题,并且传参方式也比较简单…...

复制带随机指针的复杂链表
目录一、题目题目链接二、题目分析三、解题思路四、解题步骤4.1 复制结点并链接到对应原节点的后面4.2 处理复制的结点的随机指针random4.3 分离复制的链表结点和原链表结点并重新链接成为链表五、参考代码六、总结一、题目题目链接 题目链接:https://…...

【基于协同过滤算法的推荐系统项目实战-2】了解协同过滤推荐系统
本文目录1、推荐系统的关键元素1.1 数据1.2 算法1.3 业务领域1.4 展示信息2、推荐算法的主要分类2.1 基于关联规则的推荐算法基于Apriori的算法基于FP-Growth的算法2.2 基于内容的推荐算法2.3 基于协同过滤的推荐算法3、推荐系统常见的问题1、冷启动2、数据稀疏3、不断变化的用…...

线程安全(重点)
文章目录一.线程安全的概念1.1 线程安全的概念1.2 线程不安全的原因1.3 解决线程不安全二.synchronized-monitor lock(监视器锁)2.1 synchronized的特性(1)互斥(2)刷新内存(3)可重入2.2 synchronied使用方法1.直接修饰普通方法:2.修饰静态方法:3.修饰代码块:三.死锁3.1死锁的情…...