【C++】 —— 笔试刷题day_5

刷题day_5

一、游游的you

题目链接:游游的you

题目解析

在这里插入图片描述

题目要求:

输入abc表示you三个字母的个数;

将这些字母连成字符串,并且这里you三个字母相邻获得2分,两个o字母相邻获得1分。

让我们输出最多可以获得多少分

这里得分规则我们需要注意

  • you相邻获得2
  • oo相邻获得1分,如果字符ooo可以获得2分,oooo可以获得3

算法思路

我们知道了这个得分规则,我们想要获得更高的分数:

  1. 尽可能的让you相邻
  2. 如果不能组成you,则就让所有的o相邻

这样我们就可以知道如何去求最大得分了,

  • 首先就是you的个数(就等于abc中最小的那一个)
  • 然后就是剩余o的个数,让剩余所有的o相邻得分就是o的个数-1;

这样最多的得分就可以表示出来了;

这里需要注意剩余o的个数可能为0,这时就需要处理一下,否则就加了-1

代码实现

#include <iostream>
using namespace std;
int main() {int q;cin>>q;while(q--){int a,b,c;cin>>a>>b>>c;int y = min(min(a,b),c);int x = max(b - y - 1,0);cout<<y*2 + x<<endl;}return 0;
}

二、腐烂的苹果

题目链接:腐烂的苹果

题目解析

在这里插入图片描述

题目:

有一个m*n的网格,其中每一个格子有三种情况(没有苹果/0有好的苹果/1有腐烂的苹果/2)

其中,腐烂的苹果每分钟都会向四周(上下左右)传播病菌,相邻的苹果都会腐烂。

让我们求出需要多少分钟,会导致所有的苹果变腐烂;(如果有苹果一直不会腐烂,就返回-1

算法思路

读懂了题目,现在来看如何去实现这个算法(这里简述一下)

这道题的标签是BFS广度优先遍历

所以,这里先遍历给的数组,让所有的2(腐烂的苹果)都存放到一个队列当中;

再进行广度优先遍历,对队列中腐败的苹果进行扩散

这里注意:题目要求出时间,所有我们要按时间来进行

BFS遍历,什么意思呢?

在这里插入图片描述

这里就来捋一捋整个代码的流程

首先准备工作,定义dx[4]dy[4]表示上下左右位置下标变化值;定义vis数组来表示每个位置苹果是否腐烂(true表示腐败`);

  • 遍历grid,将所有值为2的位置的下标入队列;
  • 进行BFS广度优先遍历,进行腐烂的扩散操作;
  • 扩散过程:依次对队列中的每个下标进行上下左右扩散,如果扩散位置不越界,并且扩散位置有苹果且苹果吗,没有被传入腐败,那就修改扩散位置的vis[x][y]true,并让扩散位置下标入队列。
  • 最后,遍历grid数组,如果存在一个位置有苹果且苹果没有被传染腐败,就返回-1否则返回ret-1结果。

代码实现

class Solution {
public:int m,n;int dx[4] = {0,0,-1,1};int dy[4] = {1,-1,0,0};bool vis[1001][1001] = {false}; //表示苹果是否腐烂int rotApple(vector<vector<int> >& grid) {// write code herem = grid.size();n = grid[0].size();queue<pair<int,int>> q;//用来存放腐烂苹果的下标for(int i=0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j] ==2)q.push({i,j});}}int ret = 0;while(q.size()){ret++;//每加依次,表示过了一分钟int sz = q.size();//记录当前q在腐烂苹果的个数while(sz--)// 循环sz次,表示这一分钟有多少个腐烂苹果会扩散{auto [a,b] = q.front();//记录下标q.pop();//删除整个位置,表示已经扩散过了for(int i=0;i<4;i++){int x = a + dx[i];int y = b + dy[i];//如果扩散位置不越界,扩散位置有苹果且苹果没有腐烂if(x>=0 && x<m && y>=0 && y<n && grid[x][y] == 1 && !vis[x][y]){vis[x][y] = true;//标记苹果腐烂q.push({x,y});//插入到q中}}}}for(int i=0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j] == 1 && !vis[i][j])return -1;}}return ret-1;}
};

三、孩子们的游戏

题目链接:孩子们的游戏

题目描述

在这里插入图片描述

这是一道经典的约瑟夫问题,对于约瑟夫,可是早有耳闻;这里就直接提供思路

这里大致可以将所有的思路/解法分为两种

  • 模拟实现
  • 使用递推/递归/动态规划

为什么可以分为两种呢?

第一种就是模拟实现整个过程,可以说是暴力解法了

第二种它们都有一个共同的思路,就是将问题一步一步划分,然后寻找子问题的关系;从而简化整个过程。

算法分析

这里对于两种思路来简单分析一下:

首先模拟实现整个过程

我们可以使用链表或者数组来模拟整个过程。(这里使用数组来模拟)

  • 我们定义一个数组(bool类型的),来表示当前位置下标对应的人还是否在圈内
  • 定义用来计数的一些变量i表示当前遍历位置的下标、sum表示圈内剩余的人数、x表示当前应该报的数
  • 循环遍历整个数组,如果遍历遇到当前位置对应的人不在圈内v[i] == 0,就i++并直接执行下一次循环
  • 如果当前位置的人在圈内,就继续判断报数是否等于m-1x == m-1,如果等于将让当前位置的人出圈,再继续执行循环遍历
  • 知道圈内剩余一个人sum == 1,循环结束,最后返回剩余那个人的下标即可。

其次,第二种思路就说动态规划

这种思路主要就在于理清楚dp[i]代表了什么、和dp[i]状态转移方程

  • 这里dp[i]代表当有i个人时最后剩余的那个人

在这里插入图片描述

如上图所示,我们找到了第一次报圈和第二次报圈对应下标的关系dp[n] = (dp[n-1] + n) %b

我们将dp[i]表示有i个人报圈最后胜出的人,那么dp[0] = 0;那i=2时;dp[2] = (dp[1] +m) %n

以此类推,我们就可以直接推出来有n个人报圈时,最后胜出的人。

代码实现

第一种:

class Solution {public:int LastRemaining_Solution(int n, int m) {//数组来模拟vector<int> vp(n, 1);int x = 0, sum = n;//x表示报数,sum表示剩余人数int i = 0;while (sum > 1) {if (vp[i] == 0) {i++;i %= n;continue;}if (x == m - 1) {sum--;x++;x %= m;vp[i] = 0;} else {x++;}i++;i %= n;}int ret = 0;for (int i = 0; i < n; i++) {if (vp[i] == 1) {ret = i;break;}}return ret;}
};

第二种:

class Solution {
public:int LastRemaining_Solution(int n, int m) {int f = 0;for(int i=1;i<=n;i++)  f = (f+m) % i;return f;}
};

今天题目有点难度,继续加油!!!

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

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

相关文章

78. Harmonyos NEXT 懒加载数据源实现解析:BasicDataSource与CommonLazyDataSourceModel详解

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; Harmonyos NEXT 懒加载数据源实现解析&#xff1a;BasicDataSource与CommonLazyDataSourceModel详解 文章目录 Harmonyos NEXT 懒加载数据源实现解…

如何打包数据库mysql数据,并上传到虚拟机上进行部署?

1.连接数据库&#xff0c;使得我们能看到数据库信息&#xff0c;才能进行打包上传 2. 3. 导出结果如下&#xff0c;是xml文件 4.可以查询每个xml文件的属性&#xff0c;确保有大小&#xff0c;这样才是真实导出 5跟着黑马&#xff0c;新建文件夹&#xff0c;并且把对应的东西放…

Springboot+mabatis增删改查,设置不可重复字段

今天又学会了一个操作&#xff0c;我们数据库中&#xff0c;可能要求一个字段名字不可以重复&#xff0c;我们就进行这样的操作&#xff01;设计表&#xff0c;然后点击索引&#xff0c;选择字段&#xff0c;加入索引类型和索引方法&#xff0c;然后ctrlS保存!即可 如果一旦还…

C# NX二次开发:矩形阵列和线性阵列等多种方法讲解

大家好&#xff0c;今天讲一些关于阵列相关的UFUN函数。 UF_MODL_create_linear_iset (view source)&#xff1a;这个函数为创建矩形阵列。 intmethodInputMethod: 0 General 1 Simple 2 Identicalchar *number_in_xInputNumber in XC direction.char *distance_xInputSpac…

嵌入式硬件: GPIO与二极管基础知识详解

1. 前言 在嵌入式系统和硬件开发中&#xff0c;GPIO&#xff08;通用输入输出&#xff09;是至关重要的控制方式&#xff0c;而二极管作为基础电子元件&#xff0c;广泛应用于信号整流、保护电路等。本文将从基础原理出发&#xff0c;深入解析GPIO的输入输出模式&#xff0c;包…

CTF--Web安全--SQL注入之报错注入

CTF–Web安全–SQL注入之报错注入 一、报错注入的概念 用户使用数据库查询语句&#xff0c;向数据库发送错误指令&#xff0c;数据库返回报错信息&#xff0c;报错信息中参杂着我们想要获取的隐私数据。通常在我们在页面显示中找不到回显位的时候&#xff0c;使用报错注入。 二…

matlab 模糊pid实现温度控制

1、内容简介 matlab162-模糊pid实现温度控制 可以交流、咨询、答疑 2、内容说明 略基于PID电加热炉温度控制系统设计 摘要 电加热炉随着科学技术的发展和工业生产水平的提高&#xff0c;已经在冶金、化工、 机械等各类工业控制中得到了广泛应用&#xff0c;并且在国民经济中占…

RabbitMq C++客户端的使用

1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;实现&#xff0c;支持多种编程语言和平台。以下是其核心特点和介绍&#xff1a; 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…

星越L_备胎更换/千斤顶使用讲解

目录 1.车辆停靠在坚实平坦的路面上。 2.打开危险警示灯、 3.设立三角指示牌 4.取出备胎及随车工具 5.使用螺栓扳手对每个螺母进行松动 6使用千斤顶抬升 7、其他 轮胎漏气或爆胎的情况,需要使用千斤顶更换备胎 1.车辆停靠在坚实平坦的路面上。 2.打开危险警示灯、

【Python 数据结构 15.哈希表】

目录 一、哈希表的基本概念 1.哈希表的概念 2.键值对的概念 3.哈希函数的概念 4.哈希冲突的概念 5.常用的哈希函数 Ⅰ、直接定址法 Ⅱ、平方取中法 Ⅲ、折叠法 Ⅳ、除留余数法 Ⅴ、位与法 6.哈希冲突的解决方案 Ⅰ、开放定址法 Ⅱ、链地址法 7.哈希表的初始化 8.哈希表的元素插…

软件测试之测试分类

1. 为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节&#xff0c;具有较⾼的复杂性&#xff0c;对于软件测试&#xff0c;可以从不同的⻆度 加以分类&#xff0c;使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试 的分类⽅…

Devops CI/CD

Devops CI/CD DevOps 中的 CI/CD&#xff1a;持续集成与持续部署的深度解析一、CI/CD 基本概念&#xff08;一&#xff09;持续集成&#xff08;二&#xff09;持续部署 二、CI/CD 实施步骤&#xff08;一&#xff09;版本控制&#xff08;二&#xff09;自动化构建&#xff08…

leetcode105为什么可以root.left可以截取到前序遍历二叉树的(0,index),而不是(1,index+1)

这里以105前序和中序遍历构造二叉树为例&#xff0c;106同理 原因在于preoder.shift()会改变原数组&#xff0c;已经把preoder的第一个队头元素已经排除出去了&#xff01;&#xff01;&#xff01; 306题中的截取后续遍历中用pop&#xff08;&#xff09;同理

数据结构---堆栈和列

一、堆栈 1.栈堆&#xff1a;具有一定操作约束的线性表&#xff1b;&#xff08;只在一端做插入删除&#xff09; 2.栈的顺序存储结构&#xff1a; 由一个一维数组和一个记录栈顶元素位置的变量组成。定义方式如下&#xff1a; 3.入栈操作&#xff1a; 注意&#xff1a;&…

golang快速上手基础语法

变量 第一种&#xff0c;指定变量类型&#xff0c;声明后若不赋值&#xff0c;使用默认值0 package mainimport "fmt"func main() {var a int //第一种&#xff0c;指定变量类型&#xff0c;声明后若不赋值&#xff0c;使用默认值0。fmt.Printf(" a %d\n"…

【idea代码ai插件】利用接入硅基流动的deepseekR1的api在idea里实现问答,辅助写代码

注册硅基流动账号 https://siliconflow.cn/zh-cn/ 然后新建api密钥&#xff0c;这里的api密钥可以点击复制&#xff0c;等会输入要用 可以看到现在新注册是有额度的&#xff0c;你们应该是14元 模型广场这里可以调用deepseek的v3和r1&#xff0c;注意因为是蹭&#xff0c;赠…

NO.42十六届蓝桥杯备战|数据结构|算法|时间复杂度|空间复杂度|STL(C++)

数据结构 什么是数据结构 在计算机科学中&#xff0c;数据结构是⼀种数据组织、管理和存储的格式。它是相互之间存在⼀种或多种特定关系的数据元素的集合。 说点通俗易懂的话&#xff0c;数据结构就是数据的组织形式&#xff0c;研究的就是把数据按照何种形式存储在计算机中 …

【CSS3】化神篇

目录 平面转换平移旋转改变旋转原点多重转换缩放倾斜 渐变线性渐变径向渐变 空间转换平移视距旋转立体呈现缩放 动画使现步骤animation 复合属性animation 属性拆分逐帧动画多组动画 平面转换 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#x…

Keepalived高可用架构实战:从安装配置到高级应用详解

一.架构 用户空间核心组件&#xff1a; vrrp stack&#xff1a;VIP 消息通信checkers&#xff1a;监测 Real Serversystem call&#xff1a;实现 vrrp 协议状态转换时调用相关本地功能SMTP&#xff1a;邮件组件IPVS wrapper&#xff1a;生成 IPVS 规则Netlink Reflector&…

Linux:利用System V系列的-共享内存,消息队列实现进程间通信

对于管道的进程间通信方式&#xff0c;需要频繁的调用系统调用(read,write)。而我们今天首先要介绍的共享内存&#xff0c;在开辟好空间之后&#xff0c;便可以跳过系统调用&#xff0c;直接进行读写操作。 一.System V共享内存(主要) 共享内存区是最快的IPC形式。一旦这样的内…