C++笔试强训day4

目录

1.游游的you

2.腐烂的苹果

3.孩子们的游戏


1.游游的you

链接:

分析题意之后,发现就是一道简单的贪心,当然也可以把他看作纯数学题。

因为you和oo里面都有o,但是you可以得两分,所以贪心策略尽可能的去凑更多的you,剩下的o则是n - 1分。

详细代码:

#include <iostream>
using namespace std;

int x,y,z;

int main() {
    int n;
    cin >> n;

    while(n--)
    {
        cin >> x >> y >> z;

        int mi = min(x,min(y,z));

        y -= mi;
        if(y > 0)
            cout << mi * 2 + y - 1 << endl;
        else
            cout << mi * 2 << endl;
    }   
}

注意:

要判断剩下的y是否大于0,不然会导致部分样例出错。

2.腐烂的苹果

链接

我一开始分析这道题目的时候,想到的竟然是DFS遍历,压根做不出来,因为做不到多源搜索。

正解应该是BFS的多源搜索。

首先先遍历grid,将所有的腐烂苹果存入队列,进行多源搜索。

最后需要返回的时候应该判断有没有苹果1没被感染到。

详细代码:

class Solution {
public:
    const static int N = 1010;
    int dx[4] = { 0, 0, 1, -1 };
    int dy[4] = { 1, -1, 0, 0 };
    bool vis[N][N] = { false };
    int m, n;
    int time = 0;

    queue<pair<int, int>> q;

    void BFS(vector<vector<int> >& grid) {

        while (q.size()) {
            time++;
            int size = q.size();
            while (size--) {
                int x = q.front().first;
                int y = q.front().second;
                q.pop();

                for (int i = 0; i < 4; ++i) {
                    int a = x + dx[i];
                    int b = y + dy[i];

                    if (a >= 0 && a < m && b >= 0 && b < n
                        && grid[a][b] == 1 && !vis[a][b]) {
                        vis[a][b] = true;
                        q.push({ a, b });
                    }
                }
            }
        }
    }

    int rotApple(vector<vector<int> >& grid) {
        m = grid.size();
        n = grid[0].size();

        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (grid[i][j] == 2) {
                    q.push({ i, j });
                }
            }
        }

        // BFS遍历
        BFS(grid);
        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 time - 1;//最后的苹果还会进行一次无效遍历  减掉那次
    }
};

怎么说呢,算是一道比较难的题目吧,个人觉得。

3.孩子们的游戏

链接

就是约瑟夫的环形链表。

方法一:模拟

可以用环形链表或者数组来模拟实现:

(这里我写的是环形链表)

class Solution {
public:
    typedef struct ListNode ListNode;

    ListNode* ListBuyNode(int x) {
        ListNode* node = (ListNode*)malloc(sizeof(ListNode));
        if (node == NULL) {
            perror("malloc fail!");
            exit(1);
        }
        node->val = x;
        node->next = NULL;
        return node;
    }

    //创建带环链表
    ListNode* CreateList(int n) {
        ListNode* phead = ListBuyNode(1);
        ListNode* ptail = phead;
        for (int i = 2; i <= n; i++) {
            ListNode* node = ListBuyNode(i);
            ptail->next = node;
            ptail = ptail->next;
        }
        ptail->next = phead;
        return ptail;
    }

    //n = 5;m = 2;
    int LastRemaining_Solution(int n, int m) {
        ListNode* prev = CreateList(n);
        ListNode* cur = prev->next;
        int count = 1;
        while (cur->next != cur) {
            if (count == m) {
                //杀掉
                prev->next = cur->next;
                free(cur);
                cur = prev->next;
                count = 1;
            }
            else {
                prev = cur;
                cur = cur->next;
                count++;
            }
        }
        return cur->val - 1;
    }
};

减一是因为我写的是从1开始的,而题目是从0开始。

方法二:递推/ 动态规划

就是只需要寻找 dp[n] 和 dp[n - 1] 的映射关系就好了。

图中所画的内环是i - 1,外环是i。分析很容易得到dp[i]与dp[i - 1]的关系为dp[i] = dp[i - 1] + m。

最后为了防止+m后超出n,因此模上一个n(目前的数量)。

因此:

class Solution 
{
  public:
    int dp[5010];
    
    int LastRemaining_Solution(int n, int m) 
    {
        dp[1] = 0;
        for (int i = 2; i <= n; i++) 
            dp[i] = (dp[i - 1] + m) % i;
        return dp[n];
    }
};

因为只有一维,而且状态转移方程只涉及一个数,也可以不创建dp表,用一个变量来表示。

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

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

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

相关文章

【嵌入式】keil5安装(同时兼容C51和STM32)

最近在开发STM32的时候&#xff0c;安装Keil5&#xff0c;遇到STM32和C51的共存的问题&#xff0c;在网上找了很多方法&#xff0c;又遇到一些bug&#xff0c;最终还是弄好了。因此将处理的过程记录下来&#xff0c;希望对遇到相同问题的朋友一些启发。 1、下载安装包 Keil P…

vue-Router 路由(常量路由)

1、安装 pnpm i vue-router 2、新建文件&#xff1a;src/routes.ts import { RouteRecordRaw } from vue-routerexport const constantRoute: RouteRecordRaw[] [{//path: /,redirect: /login,},{//path: /login,component: () > import(/views/Login/index.vue),name…

mysql基础6——多表查询

外键 把分散在多个不同表里面的数据查询出来的操作&#xff0c;就是多表查询 把两个表连接&#xff1a;使用外键(foreign key)和连接(join) 外键在表创建的阶段定义也可以通过修改表定义&#xff0c;连接在查询字段把相同意义的字段连接起来 外键就是从表中用来引用主表中数…

【MATLAB源码-第190期】基于matlab的32QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

舍得酒业陷入瓶颈期:业绩增速再放缓,股价低迷,市场信心缺失?

撰稿|行星 来源|贝多财经 被誉为“川酒六朵金花”之一的舍得酒业&#xff0c;混的不算好。 近日&#xff0c;舍得酒业股份有限公司&#xff08;SH:600702&#xff0c;下称“舍得酒业”&#xff09;披露2023年年度报告。在白酒行业活性整体趋弱的大环境下&#xff0c;舍得酒业…

加入新团队时,为什么你需要一个“WTF 笔记本”

原文&#xff1a;Nat Bennett - 2021.09.04 我有一个子弹日记。我并不是你在 Pinterest 上看到的那种用精美排版的人——大部分只使用黑色墨水&#xff0c;标准设置&#xff0c;偶尔会有自定义的集合。 每当我加入新的团队&#xff0c;都会翻到下一页&#xff0c;然后在那一页…

引用静态方法

import java.util.Arrays; import java.util.Comparator;public class demo1 {//引用public static void main(String[] args) {Integer []arr{1,2,4,3,8,6};//匿名内部类Arrays.sort(arr, new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o…

docker 报错 error adding seccomp filter rule for syscall clone3

网上有一些说法&#xff0c;例如重新安装docker 但是我自己尝试&#xff0c;用 –security-opt seccompunconfined 就可以&#xff0c;但是需要把这个命令放到紧挨着run的位置&#xff0c;如果放到偏后的位置&#xff0c;可能不起作用。 以下命令是其他网友启动是的命令&…

是用computed获取vuex数据后,修改数据页面不响应的问题

问题描述&#xff1a; 代码里使用computed获取mapGetters的数据后&#xff0c;直接在页面使用&#xff0c;在methods中更新数据后&#xff0c;控制台打印数据已经更改&#xff0c;但是页面上的数据没有同步更改和响应。 分析&#xff1a; 1.computed是计算属性&#xff0c;所有…

匿名函数与gorm中的Transaction事务方法

整理下go中的匿名函数&#xff0c;项目中很多地方都在用。 1、函数类型的变量 Go中&#xff0c;函数也是一种数据类型。定义一个函数&#xff0c;把这个函数赋值给一个变量&#xff0c;这个变量就是函数类型的变量&#xff0c;用这个变量等价于直接调函数&#xff1a; packa…

AD高速板设计--HDMI(笔记)

HDMI的布线要求&#xff1a; 差分线对内误差为5以内&#xff0c;所有的差分线误差在10以内&#xff1a; 进行阻抗匹配需要调整线宽&#xff0c;间距和板层。 四对差分线&#xff0c;控制阻抗为100欧姆&#xff1b;四对单端信号线&#xff0c;控制阻抗为50欧姆。 \] HDMI识别过…

Redis底层数据结构之quicklist

目录 一、概述二、quicklist结构三、quicklistNode结构四、优缺点 上一篇 redis底层数据结构之ziplist 一、概述 QuickList是由多个 ziplist 组成的双向链表&#xff0c;每个 ziplist 存储一定数量的元素。优点:结合了 ziplist 和双向链表的优点&#xff0c;既节省空间&#x…

【数据结构】栈和队列(链表模拟队列)

学习本章节必须具备 单链表的前置知识&#xff0c; 建议提前学习&#xff1a;点击链接学习&#xff1a;单链表各种功能函数 细节 详解 本章节是学习用 单链表模拟队列 1. 单链表实现队列 思路如下 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数…

查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值

公司有一堆相同类别的客户&#xff0c;每个客户都部署了相同的一套系统&#xff0c;每套系统对应一个相同结构的数据库&#xff0c;昨天老板让查一下手机号码177xxxxx248是属于哪个客户的客户。 我要查的这个号码来自于oa_member表中的phone字段&#xff0c;我需要对所有的数据…

2024年51cto视频如何提取

2024年&#xff0c;对于如何提取51cto网站上的视频&#xff0c;许多人都选择在该平台购买自己所需的学习视频。然而&#xff0c;在51cto网页上观看视频将消耗用户的流量。为了解决这一问题&#xff0c;我开发了名为小白51cto工具的软件&#xff0c;使用户能够轻松将视频下载到本…

【图解计算机网络】网络协议分层解析

网络协议分层解析 网络协议分层应用层传输层网络层数据链路层 TCP/IP分层模型通讯示例 网络协议分层 网络协议分层一共有OSI七层网络协议&#xff0c;TCP/IP四层网络网络协议&#xff0c;还有五层网络协议。 七层由于分层太多过于复杂&#xff0c;实际应用中并没有使用&#x…

解析deb与rpm文件的操作技巧

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解析deb与rpm文件的操作技巧 前言deb文件介绍与操作deb 文件介绍特点和用途在 Debian、Ubuntu 系统中使用 deb 文件进行软件安装和管理安装 deb 文件处理依赖问题更新和卸载使用 APT 进行管理 deb文件…

学习笔记:Vue3(图片明天处理)

文章目录 1.概述1.1定义1.2特性1.3组合式API 2.基本用例-项目搭建3.项目目录介绍3.1概述3.2查看文件 4.组合式API4.1概述4.2新的API风格4.2.1概述4.2.2写法4.2.3基本用例-Setup选项使用4.2.4基本用例-语法糖写法&#xff08;重点&#xff09;4.2.5执行时机4.2.6代码特点 4.3响应…

C++从入门到精通——模板

模板 前言一、泛型编程二、函数模板函数模板的概念函数模板格式示例 函数模板的原理函数模板的实例化隐式实例化显式实例化示例 auto做模板函数的返回值模板参数的匹配原则总结 三、类模板类模板的定义格式类模板的实例化 前言 C模板是C语言中的一种泛型编程技术&#xff0c;可…

《星尘传说》游戏完整源码(源码+引擎+客户端+服务端+教程+工具),云盘下载

《星尘传说》是一款奇幻类大型多人在线角色扮演电脑客户端游戏&#xff0c;该游戏设置有两大阵营&#xff0c;六个国家以及22个职业&#xff0c;采用3D卡通风格&#xff0c; 有兴趣的&#xff0c;可以架设个外网&#xff0c;让大家一起玩。 《星尘传说》游戏完整源码&#xff0…