刷题强训(day05) -- 游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)

目录

1、游游的you

1.1 题目

1.2 思路

1.3 代码实现

2、腐烂的苹果

2.1 题目

2.2 思路

2.3 代码实现

3、孩子们的游戏(圆圈中最后剩下的数)

3.1 题目

3.2 思路

 3.3 代码实现

3.3.1 环形链表

​编辑3.3.2 动态规划

​编辑


1、游游的you

1.1 题目

1.2 思路

根据题目得知,首先要you的次数最多,再去拼接oo,注意oo是1分,ooo是2分,oooo是3分,所以oo的分数为b-;you的个数是a,b,c中的最小值,所以我们先拼出you,同时消耗b,所以oo的分数就时b减去you的个数在减去1;

理清思路,接下来就是代码实现。

1.3 代码实现

#include <iostream>
using namespace std;

int main() 
{
    int q = 0;
    cin >> q;
    int a,b,c;
    while(q--)
    {
        cin >> a >> b >> c;
        int you = min(a,min(b,c));
        int oo = max(b-you-1,0);
        cout << you*2+oo << endl;
    }
    return 0;
}

2、腐烂的苹果

2.1 题目

2.2 思路

这是一道考察多源BFS+最短路的题目,0,1,2分别表示空格,好苹果,坏苹果,坏苹果每分钟回向上下左右四个方向扩散(这里可以理解为搜索),找到好苹果则传染为坏的,因为这里是一圈一圈的扩散,所以能想到用多源BFS。

我们先遍历一遍矩阵,把所有坏苹果放入到一个队列中,就可以实现每次出队列就可同时操作多个坏苹果,用一个变量count记录一下坏苹果的传播次数,传播到0则不管,传播到1则把1置为2,或标记为已传播,然后把这个被标记的苹果放到对列中。遍历传播结束后,在遍历一遍矩阵是否还有好苹果,有则返回-1,否则返回count。

2.3 代码实现

注意遍历结束后,还要判断矩阵中是否还有好苹果,这时候相当于多扩散了一次,所以要输出count - 1。

class Solution 
{
    int m,n;
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
    bool vis[1001][1001] = {0};
public:
    int rotApple(vector<vector<int> >& grid) 
    {
        n = grid.size(),m = grid[0].size();
        queue<pair<int,int>> q; //用pair存放坏苹果的行和列
        for(int i = 0;i < n;i++)
            for(int j = 0;j < m;j++)
                if(grid[i][j]==2)
                    q.push({i,j});
                    
        int count = 0;
        while(q.size())
        {
            count++;
            int qs = q.size();
            while(qs--)
            {
                auto [a,b] = q.front();//拿出队头元素
                q.pop();
                for(int i =0 ;i< 4;i++)
                {
                    int x = a + dx[i],y= b + dy[i];
                    //边界控制,防止出界且好苹果未被标记
                    if(x>=0 && x<n && y >= 0 && y < m && grid[x][y] == 1 && !vis[x][y])
                    {
                        vis[x][y] = true;
                        q.push({x,y});
                    }
                }
            }
        }
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j< m;j++)
            {
                if(grid[i][j] == 1 && !vis[i][j])
                    return -1;
            }
        }
        return count-1;
    }
};

 

3、孩子们的游戏(圆圈中最后剩下的数)

3.1 题目

3.2 思路

这是一个约瑟夫环问题,我们可以用环形链表模拟来实现或者用动态规划来解决

 3.3 代码实现

3.3.1 环形链表

class Solution 
{
public:
    int LastRemaining_Solution(int n, int m) 
    {
        list<int> lt;
        for(int i = 0;i < n;i++)
            lt.push_back(i);
        auto it  = lt.begin();
        while(lt.size()>1)
        {
            for(int i = 1; i <  m;i++)
            {
                ++it;
                //当走到尾部的时候,让it在走到链表的头,形成环
                if(it == lt.end())
                    it = lt.begin();
            }
            //erase删除后自动指向下一个节点
            it = lt.erase(it);
            if(it == lt.end())
                it = lt.begin();
        }
        return *it;
    }
};

3.3.2 动态规划

class Solution 
{
public:

    int LastRemaining_Solution(int n, int m) 
    {   
        // int dp[5001];
        // dp[1] = 0;
        // for(int i = 2;i <= n;i++)
        //     dp[i] = (dp[i-1]+m) % i;
        // return dp[n];

        //优化一下空间,用一个变量代dp,因为我们仅用dp[i-1]的值
        int f = 0;
        for(int i = 2;i <=n;i++)
            f = (f+m) % i;
        return f;
    }
};


本篇完,下篇见!如有问题,欢迎在评论区指导!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第546题移除盒子

题目&#xff1a; 题解&#xff1a; class Solution {int[][][] dp;public int removeBoxes(int[] boxes) {int length boxes.length;dp new int[length][length][length];return calculatePoints(boxes, 0, length - 1, 0);}public int calculatePoints(int[] boxes, int l…

精华帖分享|历史波动率和已实现波动率纠缠研究

本文来源于量化小论坛公共讨论区板块精华帖&#xff0c;作者为期权罗&#xff0c;发布于2023年11月24日。 以下为精华帖正文&#xff1a; 01 思路由来 波动率研究有很多学术化得研究成果&#xff0c;比较枯燥/难&#xff0c;最近结合波动率继续交易了段时间&#xff0c;一是开…

ssm088基于JAVA的汽车售票网站abo+vue(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;汽车售票网站的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为…

LeetCode Hot100 49.字母异位词分组

题干&#xff1a; 思路&#xff1a; 输入的是一个字符串数组&#xff0c;输出是一个列表&#xff0c;首先我们需要通过遍历数组获得每一个字符串&#xff0c;我们想要判断获得的任意两个字符串是不是字母异位词&#xff0c;所以可以将获得的字符串排序&#xff08;转换为字符数…

金属箔电阻

6.金属箔电阻如何实现“高精度” 电阻的阻值会受到各种“应力”影响而发生改变&#xff0c;离开稳定性的高精度是没有意义的。 例如&#xff0c;电阻出厂时的精度时0.01%&#xff0c;为了实现精度付出了高昂的费用&#xff0c;但在几个月的存储或几百个小时的负载后阻值的变化…

地下水数值模拟、 地下水环评、Visual modflow Flex、Modflow

地下水数值模拟软件Visual modflow Flex实践技术应用 地下水数值模拟软件的应用&#xff0c;主要围绕的目前应用较为广泛的Visual Modflow Flex 6.1软件版本开展&#xff0c;结合具体应用场景&#xff0c;实例讲解软件的全流程应用过程&#xff0c;包括数据处理分析、数值模型…

Python 爬虫运行状态监控:进度、错误与完成情况

Python 爬虫运行状态监控&#xff1a;进度、错误与完成情况 在进行大规模数据爬取时&#xff0c;监控爬虫的运行状态至关重要。通过实时监控&#xff0c;可以了解爬虫的工作进度、出现的错误以及任务完成情况。这样可以及时发现并解决问题&#xff0c;确保数据抓取任务顺利进行…

Windows下mysql数据库备份策略

Windows下mysql的增量备份和全量备份&#xff0c;并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…

代码随想录刷题记录(二十七)——55. 右旋字符串

&#xff08;一&#xff09;问题描述 55. 右旋字符串&#xff08;第八期模拟笔试&#xff09;https://kamacoder.com/problempage.php?pid1065字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&…

【React】深入理解 JSX语法

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解 JSX语法1. JSX 简介2. JSX 的基本语法2.1 基本结构2.2 与普通 JavaScr…

Spring DispatcherServlet 详解

文章目录 一、DispatcherServlet 简介二、DispatcherServlet 的初始化&#xff08;一&#xff09;Servlet 容器启动&#xff08;二&#xff09;读取配置&#xff08;三&#xff09;创建 Web 应用上下文 三、DispatcherServlet 的工作流程&#xff08;一&#xff09;接收请求&am…

QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)

文章目录 QCustomPlot初识和基本效果图实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 QCustomPl…

区块链应用第1讲:基于区块链的智慧货运平台

基于区块链的智慧货运平台 网络货运平台已经比较成熟&#xff0c;提供了给货源方提供找司机的交易匹配方案&#xff1b;其中包含这几个角色&#xff1a;货主、承运人(司机、车队长)、监管机构、平台。司机要想接单&#xff0c;依赖于多个中心化的第三方平台&#xff0c;且三方平…

基于SpringBoot+Vue实现留守儿童爱心网站

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

关于分治法左右区间单调遍历应该如何设计

阅读以下文章&#xff0c;首先至少要求通过一道分治法的题目或听过一道该类型的讲解。 对于分治的题目&#xff0c;想必你应该知道&#xff0c;通常我们是对于一个区间拆分两个部分&#xff0c;而最小子问题通常是只包含一个元素的区间数组。为了后续方便处理更大范围的区间&am…

友思特应用 | 动态捕捉:高光谱相机用于移动产线上的食品检测

导读 高光谱成像技术能够为食品安全助力。以友思特BlackIndustry SWIR 1.7 Max 为代表的高光谱相机&#xff0c;完美解决了移动产线检测的应用难点。 高光谱技术&#xff1a;为食品安全保驾护航 食品安全一直是大众关心的热点话题&#xff0c;提供安全、高质量的食品需要对食…

【论文阅读】医学SAM适配器:适应医学图像分割的任意分割模型

【论文阅读】医学SAM适配器&#xff1a;适应医学图像分割的任意分割模型 文章目录 【论文阅读】医学SAM适配器&#xff1a;适应医学图像分割的任意分割模型一、介绍二、联系工作三、方法四、实验 Medical SAM Adapter: Adapting Segment Anything Model for Medical Image Segm…

数据结构 C/C++(实验一:线性表)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释 …

Oracle 23AI创建示例库

一、示例库介绍 多年来&#xff0c;Oracle 一直使用简单的数据库模式 SCOTT 及其两个突出的表 EMP 和 DEPT&#xff0c;用于文档和培训中的各种示例。但不少小伙伴并不知道如何创建这些示例数据&#xff0c;其实Oracle官方上就有提供对应的方法&#xff0c;本文就带领大家完成…

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…