【笔试题汇总】美团笔试题题解 第五场 2024.4.27

2024-05-01 21:36

本文主要是介绍【笔试题汇总】美团笔试题题解 第五场 2024.4.27,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2024.04.27

01. 小A的字符串替换

问题描述

小A有一个仅由小写字母组成的字符串 S S S,长度不超过 100000 100000 100000。她准备把其中所有的 mei 子串替换为 tuan 子串,你能帮她完成这个任务吗?

输入格式

输入一个仅由小写字母组成的字符串 S S S,表示小A拥有的原始字符串。

输出格式

输出一个字符串,表示将 S S S 中所有 mei 子串替换为 tuan 子串后得到的新字符串。

样例输入

meiluan

样例输出

tuanluan

数据范围

1 ≤ ∣ S ∣ ≤ 100000 1 \leq |S| \leq 100000 1S100000

解题思路

这道题目要求将给定字符串中所有的 mei 子串替换为 tuan 子串。可以通过遍历字符串的每个字符,检查当前位置开始的子串是否为 mei,如果是,则将其替换为 tuan

cpp

#include <iostream>
#include <string>using namespace std;int main() {string S;cin >> S;string result;for (int i = 0; i < S.length(); ++i) {if (S.substr(i, 3) == "mei") { // 检查是否为 "mei" 子串result += "tuan"; // 如果是,则替换为 "tuan"i += 2; // 跳过 "mei" 的长度,避免重复处理} else {result += S[i]; // 如果不是,则保持原样}}cout << result << endl;return 0;
}

02.方格纸上的四字成语

题目描述

K小姐喜欢在方格纸上写四字成语。有一天,她在一张 n × m n \times m n×m 的方格纸上填写了 n n n 行四字成语,其中第 i i i 行的四字成语为 a i a_i ai

现在,K小姐想知道,在这张方格纸上,有多少个 2 × 2 2 \times 2 2×2 的正方形区域,其中的四个字分别不相同。

输入格式

第一行包含两个正整数 n n n m m m,表示方格纸的行数和列数。

接下来 n n n 行,每行包含一个长度为 m m m 的字符串,表示 K小姐 写的四字成语。保证每个字符都是小写字母。

输出格式

输出一个整数,表示满足条件的 2 × 2 2 \times 2 2×2 正方形区域的数目。

样例输入

2 3
abb
aac

样例输出

0

样例输入

2 3
abc
cdb

样例输出

1

数据范围

1 ≤ n , m ≤ 200 1 \leq n, m \leq 200 1n,m200

【题目解析】

我们可以遍历方格纸上的每个 2 × 2 2 \times 2 2×2 区域,然后判断这个区域内的四个字是否都不相同,如果不相同则计数加一。

cpp

#include <iostream>
#include <vector>
#include <string>
#include <set>using namespace std;int countDistinctWords(const vector<string>& grid, int n, int m, int row, int col) {set<char> uniqueChars;uniqueChars.insert(grid[row][col]);uniqueChars.insert(grid[row][col + 1]);uniqueChars.insert(grid[row + 1][col]);uniqueChars.insert(grid[row + 1][col + 1]);return uniqueChars.size();
}int main() {int n, m;cin >> n >> m;vector<string> grid(n);for (int i = 0; i < n; ++i) {cin >> grid[i];}int count = 0;for (int i = 0; i < n - 1; ++i) {for (int j = 0; j < m - 1; ++j) {if (countDistinctWords(grid, n, m, i, j) == 4) {count++;}}}cout << count << endl;return 0;
}

03.卢小姐的糖果合并

问题描述

卢小姐有一串由 n n n 个正整数组成的糖果串。她每次可以选择相邻的两颗糖果合并,得到一颗新的糖果,新糖果的大小为合并前两颗糖果的大小之和。通过不断地合并,最终糖果串中只剩下一颗糖果。

如果最后剩下的这颗糖果的大小不小于 k k k,那么卢小姐就可以请她的朋友们吃这颗大糖果。卢小姐想知道,一共有多少种不同的合并方式,使得最后剩下的糖果大小不小于 k k k。由于答案可能很大,请对 1 0 9 + 7 10^9+7 109+7 取模后输出。

输入格式

第一行包含两个正整数 n n n k k k,表示糖果串的长度以及糖果大小的限制。

第二行包含 n n n 个正整数,表示初始的糖果串。

输出格式

输出一个整数,表示合并方式的数目对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

样例输入

4 4
2 3 4 5

样例输出

4

数据范围

1 ≤ n ≤ 200 1 \leq n \leq 200 1n200
1 ≤ k ≤ 40000 1 \leq k \leq 40000 1k40000
1 ≤ a i ≤ 200 1 \leq a_i \leq 200 1ai200

【题目解析】

这个问题可以通过动态规划来解决。我们可以定义一个状态数组 d p dp dp,其中 d p [ i ] dp[i] dp[i] 表示剩余糖果大小为 i i i 时的合并方式数目。然后,我们从左到右遍历糖果串,每次更新 d p dp dp 数组,以计算出剩余糖果大小为 i i i 时的合并方式数目。最终, d p [ k ] dp[k] dp[k] 即为所求的答案。

cpp

#include <iostream>
#include <vector>using namespace std;const int MOD = 1e9 + 7;int main() {int n, k;cin >> n >> k;vector<int> candies(n);for (int i = 0; i < n; ++i) {cin >> candies[i];}vector<long long> dp(k + 1, 0);dp[0] = 1; // 初始化剩余糖果大小为 0 的合并方式数目为 1for (int i = 0; i < n; ++i) {for (int j = k; j >= candies[i]; --j) {dp[j] = (dp[j] + dp[j - candies[i]]) % MOD;}}cout << dp[k] << endl;return 0;
}

04.卢小姐的红色连通块

问题描述

卢小姐拿到一棵由 n n n 个节点组成的树。其中有一些节点被染成了红色。

卢小姐定义一个红色连通块的权值为:所有节点编号乘积的因子数量。

卢小姐想知道,所有红色连通块的权值之和是多少?由于答案过大,请对 1 0 9 + 7 10^9+7 109+7 取模。

输入格式

第一行输入一个正整数 n n n,代表节点数量。

第二行输入一个长度为 n n n 的字符串,其中第 i i i 个字符表示第 i i i 号节点的颜色。R 表示红色,W 表示白色。

接下来的 n − 1 n-1 n1 行,每行输入 2 2 2 个正整数 u u u, v v v,代表 u u u 号节点和 v v v 号节点有一条边连接。

输出格式

一个整数,代表所有红色连通块的权值之和对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

样例输入

3
WRR
1 2
2 3

样例输出

4

数据范围

1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105

【题目解析】

首先,需要理解红色连通块的权值定义:即所有节点编号乘积的因子数量。对于树这种特殊的图结构,可以通过深度优先搜索(DFS)或广度优先搜索(BFS)来遍历树,并在遍历的过程中计算每个连通块的权值。

cpp

#include <iostream>
#include <vector>
#include <unordered_map>
#include <cmath>using namespace std;const int MOD = 1e9 + 7;vector<vector<int>> adj;
vector<bool> visited;
vector<int> factors;// Function to calculate factors of a number
void calculateFactors(int n) {for (int i = 1; i <= sqrt(n); ++i) {if (n % i == 0) {factors.push_back(i);if (n / i != i) {factors.push_back(n / i);}}}
}// DFS to calculate factor count in a connected component
int dfs(int node, const vector<char>& colors) {visited[node] = true;int product = 1;for (int neighbor : adj[node]) {if (!visited[neighbor] && colors[neighbor] == 'R') {product *= dfs(neighbor, colors);product %= MOD;}}calculateFactors(product); // Calculate factors of productreturn product;
}int main() {int n;cin >> n;// Read node colorsvector<char> colors(n);for (int i = 0; i < n; ++i) {cin >> colors[i];}// Initialize adjacency listadj.resize(n);visited.assign(n, false);// Read edgesfor (int i = 0; i < n - 1; ++i) {int u, v;cin >> u >> v;u--; // Adjust to 0-based indexingv--;adj[u].push_back(v);adj[v].push_back(u);}long long totalWeight = 0;// DFS to find connected components and calculate their weightsfor (int i = 0; i < n; ++i) {if (!visited[i] && colors[i] == 'R') {factors.clear(); // Clear factors for each connected componentint componentWeight = dfs(i, colors);for (int factor : factors) {totalWeight += factor;totalWeight %= MOD;}}}cout << totalWeight << endl;return 0;
}

05.LYA 的城市之旅

问题描述

LYA 是一名旅行家,她计划游览一个有 n n n 个城市的国家。这些城市由 n − 1 n-1 n1 条道路连接,形成了一棵树的结构。每条道路都有一个魅力值 w w w

LYA 准备进行 q q q 次旅行,每次旅行都有两种选择:

  1. 封锁编号为 i i i 的道路。
  2. 询问从城市 u u u 到城市 v v v 的最短路径上所有道路魅力值的异或和。

LYA 希望你能帮她计算出每次询问的结果。

输入格式

第一行包含两个正整数 n , q n,q n,q ( 1 ≤ n , q ≤ 2 × 1 0 5 ) (1 \le n,q \le 2 \times 10^5) (1n,q2×105),表示城市数量和旅行次数。

接下来 n − 1 n-1 n1 行,每行包含三个正整数 u i , v i , w i u_i,v_i,w_i ui,vi,wi ( 1 ≤ u i , v i ≤ n , u i ≠ v i , 1 ≤ w i ≤ 1 0 9 ) (1 \le u_i,v_i \le n,u_i \neq v_i,1 \le w_i \le 10^9) (1ui,vin,ui=vi,1wi109),表示一条连接城市 u i u_i ui v i v_i vi 的道路,魅力值为 w i w_i wi

接下来 q q q 行,每行表示一次旅行:

  • 如果第一个数是 1 1 1,后面会有一个正整数 i i i ( 1 ≤ i ≤ n − 1 ) (1 \le i \le n-1) (1in1),表示要封锁编号为 i i i 的道路。
  • 如果第一个数是 2 2 2,后面会有两个正整数 u , v u,v u,v ( 1 ≤ u , v ≤ n , u ≠ v ) (1 \le u,v \le n, u \neq v) (1u,vn,u=v),表示询问从城市 u u u 到城市 v v v 的最短路径上所有道路魅力值的异或和。

输出格式

对于每次询问,输出一个整数表示答案。如果城市 u u u 和城市 v v v 之间没有路径,则输出 − 1 -1 1

样例输入

5 5
1 2 1
1 3 2
2 4 3
2 5 3
2 1 2
2 1 4
2 4 5
1 2
2 1 4

样例输出

1
0
0
-1

数据范围

  • 1 ≤ n , q ≤ 2 × 1 0 5 1 \le n,q \le 2 \times 10^5 1n,q2×105
  • 1 ≤ u i , v i ≤ n 1 \le u_i,v_i \le n 1ui,vin
  • 1 ≤ w i ≤ 1 0 9 1 \le w_i \le 10^9 1wi109

【题目解析】

这个问题涉及到树的最短路径以及路径上的魅力值异或和。可以使用树的深度优先搜索(DFS)来求解。在DFS过程中记录每个节点到根节点的路径上的魅力值的异或和。首先构建一个树的数据结构,并使用深度优先搜索(DFS)计算了每个节点到根节点的路径上的魅力值的异或和。然后,使用二叉上溯法(binary lifting)预计算了每个节点的祖先,以便快速找到两个节点的最低公共祖先(LCA)。在处理查询时,它根据查询类型执行相应的操作:对于类型1,即封锁道路,直接输出-1;对于类型2,即查询最短路径上的道路魅力值异或和,首先找到两个节点的LCA,然后计算从两个节点到LCA的路径上的魅力值异或和并输出。

cpp

#include <iostream>
#include <vector>
#include <unordered_map>using namespace std;struct TreeNode {int val;vector<pair<int, int>> children; 
};void dfs(const vector<TreeNode>& tree, int node, int parent, vector<int>& xorSum, int currentXor) {xorSum[node] = currentXor;for (auto [child, charm] : tree[node].children) {if (child != parent) {dfs(tree, child, node, xorSum, currentXor ^ charm);}}
}int findLCA(const vector<vector<int>>& parent, const vector<int>& depth, int u, int v) {while (u != v) {if (depth[u] > depth[v]) {u = parent[u][0];} else if (depth[u] < depth[v]) {v = parent[v][0];} else {u = parent[u][0];v = parent[v][0];}}return u;
}int main() {int n, q;cin >> n >> q;vector<TreeNode> tree(n + 1); vector<vector<int>> parent(n + 1, vector<int>(1, 0)); vector<int> depth(n + 1, 0); for (int i = 1; i < n; ++i) {int u, v, w;cin >> u >> v >> w;tree[u].children.push_back({v, w});tree[v].children.push_back({u, w});}vector<int> xorSum(n + 1, 0); // 1-based indexingdfs(tree, 1, 0, xorSum, 0);for (int j = 1; (1 << j) <= n; ++j) {for (int i = 1; i <= n; ++i) {parent[i].push_back(parent[parent[i][j - 1]][j - 1]);}}while (q--) {int type;cin >> type;if (type == 1) {int edge;cin >> edge;cout << -1 << endl;} else {int u, v;cin >> u >> v;int lca = findLCA(parent, depth, u, v);int xorSumUV = xorSum[u] ^ xorSum[v] ^ xorSum[lca];cout << xorSumUV << endl;}}return 0;
}

整理试题不易,你的关注是我更新的最大动力!关注博主 带你看更多面试及竞赛试题和实用算法。

这篇关于【笔试题汇总】美团笔试题题解 第五场 2024.4.27的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952726

相关文章

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【Kubernetes】常见面试题汇总(一)

目录 1.简述 etcd 及其特点? 2.简述 etcd 适应的场景? 3.简述什么是Kubernetes? 4.简述 Kubernetes和 Docker的关系? 1.简述 etcd 及其特点? (1)etcd 是Core0s 团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(keyvalue)数据

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

IEEE会议投稿资料汇总http://cadcg2015.nwpu.edu.cn/index.htm

最近投了篇IEEE的顶级会议文章,一下是比较有用的一些资料,以供参考。 1.会议主页:http://cadcg2015.nwpu.edu.cn/index.htm     (The 14th International Conference on Computer-Aided Design and Computer Graphics (CAD/Graphics 2015)) 2.I