美团笔试真题2023第一场(4题)
点评:
题目总体来说偏向于中下难度
1.字符串前缀
题目描述:
现在有两个字符串S和T,你需要对S进行若干次操作,使得S是T的一个前缀(空串也是一个前缀)。每次操作可以修改S的一个字符,或者删除一个S末尾的字符。小团需要写一段程序,输出最少需要操作的次数。
输入描述
第一行一个正整数C,表示数据组数;
对于每一组数据输入两行仅包含小写字母的字符串S和T。
1≤|S|,|T|≤5X10^4 , 1≤C≤10
输出描述
对于每一组数据,输出一个整数,表示最少需要操作的次数。
样例输入
2 aba abb abcd efg样例输出
1 4
解题代码:
- 初始化两个整数变量
res和pos,res用来表示不同字符的数量,pos用来追踪当前字符的索引。 - 计算两个字符串的长度,分别存储在
maxx和minn中,其中maxx表示较长字符串的长度,minn表示较短字符串的长度。 - 计算两个字符串长度的差值,并将结果存储在
res中。这个差值表示需要添加或删除的字符数量,以使两个字符串的长度相等。 - 从字符串末尾开始向前遍历,即从
minn - 1的位置开始。 - 对于每个位置,比较S和T中的字符,如果它们不相等,增加
res的值,表示需要修改的字符数量。 - 在每次迭代后,将
pos减1,以继续比较下一个字符。 - 最后,打印
res,即需要进行的总操作次数。
#include <bits/stdc++.h>
using namespace std;
int main() {int C;cin >> C;while (C--) {string S, T;cin >> S >> T;int res = 0, pos = 0;int maxx = max(T.size(), S.size()), minn = min(T.size(), S.size());res = maxx - minn;pos = minn - 1;while (pos>=0) {if (S[pos] != T[pos])res++;pos--;}cout << res << "\n";}
}
2.小美分糖
题目描述:
某一天,小美从商店买了两种糖果,分别买了a个和b个,要分给班上n个小朋友。为了不浪费,每块糖果都得恰好分到一个小朋友。另外,两种糖果一起吃的话味道其实并不好,所以每一个小朋友都只能得到其中一种糖果。小美希望分得最少糖果的那个小朋友能得到尽量多的糖果。小美的任务是求得这个数量是多少。
输入描述
第一行一个正整数T,表示有T组数据。
对于每一组数据,输入一行n,a,b,中间用空格隔开。
1≤a,b≤10000, 2≤n≤a+b, 1≤T≤100
输出描述
对于每一组数据,输出仅一行一个整数,表示答案。
样例输入
2 5 2 3 4 7 10样例输出
1 3
解题代码:
- 初始化两个整数变量l和r,它们用于表示当前查找范围的左边界和右边界。初始时,l为0,r为a + b。
- 使用二分查找来寻找满足特定条件的最大值。在每次循环中,计算中间值mid,采用右中位数的方式(
(l + r + 1) >> 1),以确保向上取整。这个中间值mid表示当前查找范围的中点。 - 调用
check(mid)函数来检查是否满足条件。check函数的目的是计算以mid为单位能够满足条件的次数。具体来说,它计算a除以x的整数部分,再加上b除以x的整数部分,以表示在长度为x的单位中,a和b分别包含多少个。 - 如果
check(mid)返回true,表示以长度为mid的单位可以满足条件,将l更新为mid,即将查找范围右移。如果返回false,表示以长度为mid的单位不能满足条件,将r更新为mid - 1,即将查找范围左移。 - 继续二分查找,直到l和r相等,此时找到的最大mid值就是满足条件的最大单位长度。
- 最后,输出r的值,它表示满足条件的最大单位长度。
#include <bits/stdc++.h>
using namespace std;
int n, a, b, mid;
int check(int x) {int cnt = 0;cnt = (a / x ) + (b / x);return cnt >= n;
}
int main() {int t;cin >> t;while (t--) {cin >> n >> a >> b;int l = 0, r = a + b;while (l < r) {mid = (l + r + 1) >> 1;if (check(mid))l = mid;elser = mid - 1;}cout << r << "\n";}
}
3.交通规划
题目描述:
A国有n个城市,这n个城市排成一列,依次编号为1,2,3,...,n。一开始,这n座城市之间都没有任何交通路线,于是政府打算修建一些铁路来进行交通规划。接下来T天,每一天会进行如下操作的其中一种:- “L x”:表示编号为 x 的城市与其左边的城市之间修建一条铁路。如果 x 左边没有城市或者已经修建了铁路,则无视该操作;- “R x”:表示编号为 x 的城市与其右边的城市之间修建一条铁路。如果 x 右边没有城市或者已经修建了铁路,则无视该操作;- “Q x”:表示查询 x 往左边和往右边最远能到达的城市编号。你的任务是模拟以上操作,并对于每一条“Q x”操作,输出对应的答案。
输入描述
第一行输入两个正整数 n , T ;
接下来T行,每行输入形如题面中的其中一种。
1≤n≤10000, 1≤T≤200, 1≤x≤n
输出描述
对于每一个"Q x”操作,输出一行两个正整数,分别表示 x 往左边和往右边最远能到达的城市编号,中间用空格隔开。
样例输入
3 5 Q 2 L 2 Q 2 R 2 Q 2样例输出
2 2 1 2 1 3
解题思路:并查集
-
首先,定义一个常数N,表示最大元素数量。声明一个整数数组p[N],用于表示每个元素的父节点。
-
实现
find函数,它是典型的并查集中的查找函数。给定一个元素x,find(x)函数返回其所属集合的代表元素,同时进行路径压缩,即将查找路径上的所有节点的父节点设置为代表元素。 -
在
main函数中,首先从输入读取两个整数n和T,n表示元素的总数量,T表示待执行的操作次数。 -
初始化并查集,将每个元素的父节点初始化为自身,即p[i] = i,表示每个元素都自成一个集合。
-
进入循环,处理T次操作。每个操作由一个字符串op和一个整数x表示。
-
如果操作op是 "L",则表示要将元素x与其左侧的元素合并。这里首先通过
find(x)找到x所属的集合代表元素,然后判断如果x的左侧元素与x不在同一个集合,并且x不小于1,将x所属集合的代表元素设置为x左侧元素所属集合的代表元素。 -
如果操作op是 "R",则表示要将元素x与其右侧的元素合并。类似地,首先通过
find(x)找到x所属的集合代表元素,然后判断如果x的右侧元素与x不在同一个集合,并且x不大于n-1,将x所属集合的代表元素设置为x右侧元素所属集合的代表元素。 -
如果操作op是其他字符,这个操作是查询操作。首先初始化两个整数l和r,用于找到x所属集合的所有元素的范围。通过二分查找,首先向左找到l1,即从x开始往左一直到x所属集合的边界。然后,向右找到r,即从x开始往右一直到x所属集合的边界。输出l1和r,表示这个集合的范围。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int p[N];int find(int x) {if (p[x] != x)p[x] = find(p[x]);return p[x];
}int main() {int n, T;cin >> n >> T;for (int i = 1; i <= n; i++) {p[i] = i;}while (T--) {string op;int x;cin >> op >> x;if (op == "L" ) {if (find(x) != find(x - 1) && x >= 1)p[find(x)] = find(x - 1);} else if (op == "R") {if (find(x) != find(x + 1) && x <= n - 1) {p[find(x)] = find(x + 1);}} else {int l = 0, r = x;while (l < r) {int mid = l + r >> 1;if (find(x) == find(mid)) {r = mid;} elsel = mid + 1;}int l1 = l;l = x, r = n;while (l < r) {int mid = (l + r + 1) >> 1;if (find(x) == find(mid)) {l = mid;} elser = mid - 1;}cout << l1 <<" "<< r << "\n";}}
}
4.小美玩套娃
题目描述:
小美最近喜欢上了玩套娃。具体的,小美有 n 个套娃,第 i 个套娃的大小为 ai,内部空间为 bi(bi≤ai)。对于两个套娃x,y, x能放入y中当且仅当ax≤by ,且放入后会占据 y 大小为 ax 的内部空间,即 y 的内部空间剩下 by-ax,每个套娃只能放在另外的一个套娃内,每个套娃内部也只能放一个套娃(当然内部放的这个套娃可以内部还有套娃)。显然套娃是套的越多越好,于是小美给每个套娃定义了一个价值 ci,如果套完之后套娃 i 还剩 k 的内部空间,小美需要付出ci*k 的花费,总花费为所有套娃的花费之和,现在小美想知道最小的花费为多少。
输入描述
第一行一个正整数 n ,表示套娃的个数
接下来三行每行 n 个整数,分别为
a1,a2,...an
b1,b2,...bn
c1,c2,...,cn
1≤n,ai,bi,ci,≤100000,bi≤ai
输出描述
输出一个整数表示最小的花费
样例输入
3 5 4 3 4 2 2 3 2 1样例输出
6
解题思路:贪心
-
创建三个vector,a、b、c,用于存储n个元素的数据。通过循环分别读取a、b、c数组的值。
-
创建两个二维vector t0 和 t1,每个元素是一个包含四个整数的向量,用于存储a、b、c以及元素的索引。这两个向量是用来排序的备份。
-
对t0 和 t1 分别进行排序:
- t0 根据a的值由小到大排序。
- t1 根据c的值由小到大排序。
-
初始化一个变量 ri,表示可用于装载元素的空间,初始值为n-1。
-
初始化一个变量 res 用于记录最终的结果,初始值为0。
-
开始一个逆序的循环,从n-1到0:
- 在每一次循环中,首先用二分查找找到能够容纳当前元素的位置。这里通过比较 t1[i] 中的 b 值和 t0[mid] 中的 a 值来查找。
- 如果找到了一个合适的位置 r,更新 ri 为 r-1。
- 注意,代码中存在一些处理以避免重复使用相同的元素(t0[r][3] == t1[i][3])以及如果 t1[i][1] 小于 t0[r][0] 则退出循环。
-
最后,遍历 t1 数组,计算每个元素的价值(c * 剩余的容纳空间),并将结果累加到 res 中。
-
输出 res,即为最终的答案。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
//int a[N], b[N], c[N];int main() {int n;cin >> n;vector<int> a(n);vector<int> b(n);vector<int> c(n);for (int i = 0; i < n; i++) {cin >> a[i];}for (int i = 0; i < n; i++) {cin >> b[i];}for (int i = 0; i < n; i++) {cin >> c[i];}vector<vector<int>> t0(n);vector<vector<int>> t1(n);for (int i = 0; i < n; i++) {t0[i] = {a[i], b[i], c[i], i};t1[i] = {a[i], b[i], c[i], i};}//按照a由小到大sort(t0.begin(), t0.end(), [](const vector<int> &x, const vector<int> &y) {return x[0] < y[0];});//按照c又小到大sort(t1.begin(), t1.end(), [](const vector<int> &x, const vector<int> &y) {return x[2] < y[2];});int ri = n - 1;long long res = 0;for (int i = n - 1; i >= 0; i--) {//按照c价值由大到小,和容纳空间,然后二分查找到符合的个头塞入int l = 0;int r = ri;while (l < r) {int mid = (l + r + 1 ) >> 1;if (t1[i][1] >= t0[mid][0]) {l = mid;} elser = mid - 1;}if (t0[r][3] == t1[i][3])r--;if ( t1[i][1] < t0[r][0] )break;t1[i][1] -= t0[r][0];ri = r - 1;}for (int i = 0; i < n; i++) {res += (long long)(t1[i][2] * t1[i][1]);}cout << res << "\n";
}
相关文章:
美团笔试真题2023第一场(4题)
点评: 题目总体来说偏向于中下难度 1.字符串前缀 题目描述: 现在有两个字符串S和T,你需要对S进行若干次操作,使得S是T的一个前缀(空串也是一个前缀)。每次操作可以修改S的一个字符,或者删除一个…...
PHP explode (多)分隔符(delimiters) 使用
PHP explode (多)分隔符(delimiters) 使用 问题:[https://blog.csdn.net/YBaog?typeblog] 把链接中所有的字符串取出。 ㊙️ 神秘算法 ㊙️ function multi_explode($delimiters, $string) {$data [];if ($string) {$str str_replace($delimiters, $delimiter…...
AI的Prompt是什么
一.AI的Prompt的作用 在人工智能(AI)中,"Prompt"通常指的是向AI系统提供的输入或指令,用于引导AI进行特定的操作或生成特定的输出。例如,在一个对话型AI系统中,用户输入的问题就是一个prompt&…...
Qt之自定义model读写CSV文件
一.效果 本文基于QAbstractTableModel实现了一个支持读写CSV文件的TableModel。CSV数据格式虽然很简单,但是网上大多数读写方式其实都是有bug的,没考虑到字段里包含逗号或换行符这种复杂数据的情况。 二.原理 CSV(Comma-Separated Values)文件是一种简单类型的纯文本文件…...
golang 工程组件:grpc-gateway 环境安装+默认网关测试
grpc-gateway grpc-gateway 顾名思义是专门是grpc的网关。也是一个protobuf的编译器,是一个proto的插件。 grpc-gateway就是将http请求处理后转发到对应grpc服务上。很多浏览器,或者客户端开箱不支持grpc,只支持传统的restful API。 grpc网关…...
IP地址SSL证书 IP证书
在许多企业用例中,公司需要SSL证书作为IP地址。公司使用IP地址通过Internet访问各种类型的应用程序。 公网IP地址的SSL证书: 内部IP(也称为私有IP)是IANA设置为保存的IPv4或IPv6地址,例如: RFC 1918范围内…...
MVCC 过程中会加锁吗?
MVCC 机制,全称(Multi-Version Concurrency Control)多版本并发控制,是确保 在高并发下, 多个事务读取数据时不加锁也可以多次读取相同的值。 MVCC 在读已提交(READ COMMITTED)、可重复读&…...
NLP入门——语言结构/语言建模
一、Linguistics 语言学 wordsmorphology 形态学:词的构成和内部结构研究。如英语的dog、dogs和dog-catcher有相当的关系morpheme 语素:最小的语法单位,是最小的音义结合体lexeme 词位:词的意义的基本抽象单位,是一组…...
2023java攻克了抖音视频去水印视频下载
2023java攻克了抖音视频去水印视频下载 1、过滤链接 /*** 过滤链接,获取http连接地址* param url* return*/public static String decodeHttpUrl(String url) {int start url.indexOf("http");int end url.lastIndexOf("/");String decodeu…...
云计算要学习哪些技术?
学习云计算需要涉及多个技术领域和相关的工具、平台和框架。以下是一个详细的介绍,帮助您了解学习云计算所需的技术。 1. 虚拟化技术 虚拟化是云计算的基础,因此了解虚拟化技术至关重要。学习虚拟化技术时,需要掌握以下知识点: …...
Spring bean 和 Java Bean的区别
Spring bean 和 Java Bean的区别 一,JavaBean JavaBean 是一种特殊的 Java 类,遵循一定的命名规范和属性访问规范。它是一种用于表示简单数据类型、封装业务逻辑或与其他对象交互的可重用组件。 JavaBean 必须满足以下规范: 公共无参构造方…...
性能测试 —— Jmeter 命令行详细
我们在启动Jmeter时 会看见:Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说,不要使用gui模式进行负载测试,gui模式仅仅是创建脚本…...
ChatGPT AIGC 办公自动化拆分Excel工作表
在职场办公中对数据的操作,经常需要将一份表格数据拆分成多个表。 但是在Excel中进行表格拆分的步骤比较多。 在Excel中拆分工作表的步骤: 1.打开您的Excel工作簿,选择您要拆分的工作表。 2.右键单击工作表标签(通常在底部),选择“移动或复制”。 3.在“移动或复制”…...
Web前端—Flex布局:标准流、浮动、Flex布局、综合案例(短视频首页解决方案)
版本说明 当前版本号[20231024]。 20231024初版 目录 文章目录 版本说明目录Flex布局01-标准流02-浮动基本使用产品区域布局HTML标签CSS样式 清除浮动场景搭建额外标签法单伪元素法双伪元素法overfow法 03-Flex布局Flex组成主轴对齐方式侧轴对齐方式修改主轴方向弹性伸缩比弹…...
【Git LFS】huggingface 断点续传
这里有个很好的介绍:https://stackoverflow.com/questions/72610494/what-is-the-difference-between-git-lfs-fetch-git-lfs-fetch-all-and-git 提供的信息是关于如何作为普通用户使用Git LFS(Large File Storage),涵盖了各种Gi…...
互联网Java工程师面试题·Spring篇·第一弹
目录 1、一般问题 1.1、不同版本的 Spring Framework 有哪些主要功能? 1.2、什么是 Spring Framework? 1.3、列举 Spring Framework 的优点。 1.4、Spring Framework 有哪些不同的功能? 1.5、Spring Framework 中有多少个模块ÿ…...
华为手机的钱包里没有门钥匙要怎样弄
缘起: 即废话,公司的门禁卡又丢了,而经常出入的门又需要门禁卡,指纹识别太慢,而且一到春秋,我的指纹就很浅,很难识别。 聪明 拿起华为手机,一个年老的nova8. 进入钱包,…...
Latex——双引号的正确输入
方法 左引号:按两次 (即主键盘区左上角,Tab键上方的键)。 右引号:按两次 ’ (即分号右,回车左侧的键)。 参考文章: LaTex写英文论文时 如何输入单引号、双引号、省略…...
自学系列之小游戏---贪吃蛇(vue3+ts+vite+element-plus+sass)(module.scss + tsx)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、逻辑设计分析二、代码实现1.TS interface2.javascript3.页面样式(Sass) 三、截图展示四、总结 前言 主要技术如下:vue3…...
JAVA项目中什么是DTO、DAO、PO、Controller、Common
DTO(Data Transfer Object)和DAO(Data Access Object)是Java中常用的两种设计模式,它们在软件开发中扮演着不同的角色。 1. **DTO (Data Transfer Object)**:数据传输对象,主要用于在远程调用等…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
