当前位置: 首页 > news >正文

【笔试强训day19】

目录

第一题:小易的升级之路

描述

输入描述:

输出描述:

输入:

输出:

第二题:礼物的最大价值 

描述

输入:

返回值:

备注:

 第三题:对称之美

题目描述

输入描述:

输出描述:

输入

输出


第一题:小易的升级之路

题目链接:小易的升级之路_牛客题霸_牛客网

描述

小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?

输入描述:

输入有多组数据。

对于每组数据,第一行是两个整数 𝑛(1≤𝑛≤1𝑒5)表示怪物的数量和 𝑎表示小易的初始能力值。

接下来的 𝑛行,每行一个整数  𝑏(1≤𝑏≤𝑛)表示每个怪物的防御力。

输出描述:

对于每组数据,输出一行。每行仅包含一个整数,表示小易的最终能力值

示例1

输入:

3 50
50
5
30
2 10
50
30

输出:

135
30

简单的模拟题。 这里面涉及如何求最大公约数的问题,掌握了这一点在注意数据范围即可。

#include <iostream>
using namespace std;long long n, a;
//求最大公约数
int gcd(int i, int j)
{int k = 0;while(j){k = i % j;i = j;j = k;}return i;
}
int main() 
{while(cin >> n >> a){while(n--){int x;cin >> x;if(a >= x) a += x;else a += gcd(a, x);}cout << a << endl;}return 0;
}

 

第二题:礼物的最大价值 

题目链接:礼物的最大价值_牛客题霸_牛客网

描述

在一个𝑚×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

如输入这样的一个二维数组,
[
[1,3,1],
[1,5,1],
[4,2,1]
]

那么路径 1→3→5→2→1 可以拿到最多价值的礼物,价值为12

示例1

输入:

[[1,3,1],[1,5,1],[4,2,1]]

返回值:

12

备注:

∙ 0<grid.length≤200∙ 
∙ 0<grid[0].length≤200∙ 

这是一道典型的dp问题。 

经典五部曲:

1)状态表示:dp[i]][jj]表示走到(i,j)位置时得到礼物的最大价值。

2)状态转移方程:根据题意,走到(i,j)位置有两种情况,一是从(i - 1,j)走到(i,j),二是从(i,j - 1)。取这两种情况的最大值即可。

dp[i][j] = max(dp[i - 1][j] ,dp[ i ][j - 1])+ grid[ i ] [ j]即可。

因为为了防止越界,写代码是把dp表多加了一行和一列。如上图总的黄线部分。所以映射到grid数组的 i 和 j 要相应的减1.所以最终转态转移方程为:

dp[i][j] = max(dp[i - 1][j] ,dp[ i ][j - 1])+ grid[ i - 1] [ j - 1]

3)初始化:多加的一行和一列因为是非法的位置,没有礼物,直接初始化为0即可。

4)填表顺序:根据依赖关系,从上到下,从左到右填表即可。

5)返回值:dp[row][col]

class Solution {
public:int dp[210][210];int maxValue(vector<vector<int> >& grid) {int row = grid.size(), col = grid[0].size();for(int i = 1; i <= row; i++){for(int j = 1; j <= col; j++){//注意多加一行和多加一列后的映射关系dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];}}return dp[row][col];}
};

 第三题:对称之美

 题目链接:登录—专业IT笔试面试备考平台_牛客网

题目描述

给出n个字符串,从第1个字符串一直到第n个字符串每个串取一个字母来构成一个新字符串,新字符串的第i个字母只能从第i行的字符串中选出,这样就得到了一个新的长度为n的字符串,请问这个字符串是否有可能为回文字符串?

输入描述:

第一行一个数字 t,1≤t≤50,代表测试数据的组数

每组测试数据先给出一个数字 n,然后接下来n行每行一个只由小写字母组成的字符串 si。

1≤n≤100,1≤∣si∣≤501 \le n \le 100, 1\le |s_i| \le501≤n≤100,1≤∣si​∣≤50

输出描述:

在一行中输出 “Yes” or “No”

示例1

输入

2
1
a
3
a
b
c

输出

Yes

No

双指针。两个指针分别从两端开始向中间靠拢,如果left对应的字符串和right指向的字符串中有相同的字符,那么就有可能组成回文串。反之,则不可能。现在问题的关键就剩下了如何判断left对应的字符串中和right对应的字符创中有相同的字符?hash数组,可以用一个hash数组先把right对应的字符串中的字符先丢入hash中,然后在去遍历left对应的字符串,判断left字符串中出现的字符有没有在hash数组中出现过即可。但是写代码的时候还是会有一些细节的,我会在代码中添加注释哈~ 

#include <iostream>
#include <string>
#include <vector>using namespace std;//判断是否可以组成回文串
bool isOk()
{int n;cin >> n;vector<string> arr(n);for(int i = 0; i < n; i++) cin >> arr[i];//读入n个字符串//双指针遍历int left = 0, right = n - 1;while(left < right){int hash[26] = { 0 };bool flag = false;//退出循环的标志位for(auto ch : arr[right]) hash[ch - 'a']++;//将right字符串中的字符丢入hash数组中for(auto ch : arr[left])//遍历left字符串,判断left和right有没有共同的字符{if(hash[ch - 'a'] > 0)//说明有相同的字符{left++;right--;flag = true;break;}}//因为退出内层for循环的原因可能是break出来的//也可能是遍历结束后没找到相同的字符后退出的,需要用flag来区分if(flag == false) return false;}return true;
}
int main()
{int t;cin >> t;while(t--){if(isOk()) cout << "Yes" << endl;else cout << "No" << endl;}return 0;
}

相关文章:

  • Spring 事件机制与观察者模式的深度解析
  • 《 C++ 点滴漫谈: 三十三 》当函数成为参数:解密 C++ 回调函数的全部姿势
  • vue2实现在屏幕中有一个小机器人可以随意移动
  • 数字化引擎再升级:小匠物联十周年庆典与全链路创新实践
  • Ubuntu 22.04安装MySQL : Qwen2.5 模型对话数据收集与微调教程
  • 探索Linux/Unix 系统中进程与文件的深层关系
  • 在 Ubuntu 22.04.1 LTS上搭建FTP服务的详细指南
  • 【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现
  • Leetcode 去除重复字母
  • LeetCode算法题(Go语言实现)_45
  • Spring Boot 使用 QQ 企业邮箱发送邮件的完整指南(含 535 错误排查)
  • Redis奇幻之旅(三)1.redis客户端与服务端
  • 【Python爬虫】简单案例介绍4
  • PE文件(十五)绑定导入表
  • 【论文阅读】MOE奠基论文《Adaptive Mixtures of Local Experts》
  • C++基础精讲-07
  • TCPIP详解 卷1协议 五 Internet协议
  • Java 企业级应用:SOA 与微服务的对比与选择
  • SpringBoot-切换用户列表并显示用户信息
  • HarmonyOS应用开发的工程目录结构
  • 比特币价格重返10万美元,哪些因素使然?
  • 悬疑推理联合书单|虫神山事件
  • 普雷沃斯特当选新一任天主教罗马教皇
  • 国家主席习近平同普京总统共见记者
  • 奥园集团将召开债券持有人会议,拟调整“H20奥园2”本息兑付方案
  • 湖南省邵阳市副市长仇珂静主动向组织交代问题,接受审查调查