第 362 场 LeetCode 周赛题解

news2025/1/24 8:39:11

A 与车相交的点

在这里插入图片描述

数据范围小直接暴力枚举

class Solution {
public:
    int numberOfPoints(vector <vector<int>> &nums) {
        unordered_set<int> vis;
        for (auto &p: nums)
            for (int i = p[0]; i <= p[1]; i++)
                vis.insert(i);
        return vis.size();
    }
};

B 判断能否在给定时间到达单元格

在这里插入图片描述

设起点和终点的横坐标之差的绝对值为 d x dx dx , 纵坐标之差的绝对值为 d y dy dy ,则最少需要的时间 m n mn mn m a x ( d x , d y ) max(dx, dy) max(dx,dy),当起点终点不重合时只需要 t ≥ m n t\ge mn tmn 即可, 起点终点重合需要 t ≥ 2 t \ge 2 t2 t = 0 t = 0 t=0

class Solution {
public:
    bool isReachableAtTime(int sx, int sy, int fx, int fy, int t) {
        int dx = abs(sx - fx), dy = abs(sy - fy);
        int mn = min(dx, dy) + max(dx, dy) - min(dx, dy);
        if (mn != 0)
            return t >= mn;
        return t >= 2|| t == 0;
    }
};

C 将石头分散到网格图的最少移动次数

在这里插入图片描述
在这里插入图片描述

枚举排列:将待移动的石子的坐标加入数组 s t a r t start start ,将没有石子的坐标加入数组 t a r g e t target target ,枚举 s t a r t start start 可能的排列,一种排列和 t a r g e t target target 对应一种移动方案。

class Solution {
public:
    int minimumMoves(vector<vector<int>> &grid) {
        vector<pair<int, int>> start, target;
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                if (grid[i][j] >= 1) {
                    for (int k = 0; k < grid[i][j] - 1; k++)
                        start.emplace_back(i, j);
                } else if (grid[i][j] == 0)
                    target.emplace_back(i, j);
        sort(start.begin(), start.end());
        int res = INT32_MAX;
        do {
            int t = 0;
            for (int i = 0; i < start.size(); i++) {
                t += abs(start[i].first - target[i].first) + abs(start[i].second - target[i].second);
                if (t >= res)
                    break;
            }
            res = min(res, t);
        } while (next_permutation(start.begin(), start.end()));
        return res;
    }
};

D 字符串转换

在这里插入图片描述

动态规划 + 字符串哈希 + 矩阵快速幂:设 c n t cnt cnt 为满足“将 s s s 的长为 l ( 0 ≤ l < n ) l(0\le l<n) l(0l<n) 的后缀移动到 s s s 的开头后 s = = t s==t s==t ” 的 l l l 的个数。设 p k p_k pk 为:恰好 k k k 次操作后 s s s 变为 t t t 的方案数,设 q k q_k qk 为:恰好 k k k 次操作后 s s s 不能变为 t t t 的方案数,因为题目要求操作的后缀长度 0 < l < n 0<l<n 0<l<n , 所以有矩阵形式的转移方程: [ p k q k ] = [ c n t − 1 c n t n − c n t n − c n t − 1 ] [ p k − 1 q k − 1 ] \begin{bmatrix} p_k\\ q_k \end{bmatrix}=\begin{bmatrix} cnt -1 & cnt\\ n-cnt & n-cnt-1 \end{bmatrix} \begin{bmatrix} p_{k-1}\\ q_{k-1} \end{bmatrix} [pkqk]=[cnt1ncntcntncnt1][pk1qk1]
s = = t s==t s==t [ p 0 , q 0 ] T = [ 1 , 0 ] T [p_0,q_0]^T=[1,0]^T [p0,q0]T=[1,0]T ,否则 [ p 0 , q 0 ] T = [ 0 , 1 ] T [p_0,q_0]^T=[0,1]^T [p0,q0]T=[0,1]T,设转移方程中的方阵为 A A A ,则有 [ p k , q k ] T = A k [ p 0 , q 0 ] T [p_k,q_k]^T=A^k[p_0,q_0]^T [pk,qk]T=Ak[p0,q0]T ,通过矩阵快速幂求 A k A^k Ak

class Solution {
public:
    using ll = long long;
    using type_mat = vector<vector<ll>>;
    ll mod = 1e9 + 7;

    type_mat pow_mat(type_mat &mat, ll n) {//矩阵快速幂
        type_mat res = mat;//mat^n=mat*mat^(n-1)
        n--;
        for (type_mat e = mat; n; e = mat_product(e, e), n >>= 1)
            if (n & 1)
                res = mat_product(res, e);
        return res;
    }

    vector<vector<ll>> mat_product(type_mat &a, type_mat &b) {//矩阵乘法
        int m = a.size(), n = b[0].size(), mid = a[0].size();
        type_mat res(m, vector<ll>(n));
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                for (int k = 0; k < mid; k++)
                    res[i][j] = (res[i][j] + a[i][k] * b[k][j] % mod) % mod;
        return res;
    }

    int numberOfWays(string s, string t, long long k) {
        int n = s.size();
        shash h1(s, 2333, 1e9 + 9), h2(t, 2333, 1e9 + 9);
        int cnt = 0;
        bool flag = false;//s是否等于t
        if (h1(0, n - 1) == h2(0, n - 1)) {
            cnt++;
            flag = true;
        }
        for (int i = 1; i < n; i++)//判断将s长为i的后缀移至s的开头后s是否等于t
            if (h1(n - i, n - 1) == h2(0, i - 1) && h1(0, n - i - 1) == h2(i, n - 1))
                cnt++;
        vector<vector<ll>> A{{cnt - 1, cnt},
                             {n - cnt, n - cnt - 1}};
        type_mat res = pow_mat(A, k);
        return flag ? (res[0][0] + mod) % mod : (res[0][1] + mod) % mod;
    }

    class shash {//字符串哈希模板
    public:
        vector<ll> pres;
        vector<ll> epow;
        ll e, p;

        shash(string &s, ll e, ll p) {
            int n = s.size();
            this->e = e;
            this->p = p;
            pres = vector<ll>(n + 1);
            epow = vector<ll>(n + 1);
            epow[0] = 1;
            for (int i = 0; i < n; i++) {
                pres[i + 1] = (pres[i] * e + s[i]) % p;
                epow[i + 1] = (epow[i] * e) % p;
            }
        }

        ll operator()(int l, int r) {//返回s[l,r]对应的哈希值
            ll res = (pres[r + 1] - pres[l] * epow[r - l + 1] % p) % p;
            return (res + p) % p;
        }
    };

};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统之课后习题——引论

&#xff08;一&#xff09;简答题 1.在计算机系统上配置OS的目标是什么&#xff1f;作用主要表现在哪几个方面&#xff1f; 答&#xff1a; 在计算机系统上配置OS&#xff0c;主要目标是实现&#xff1a;方便性、有效性、可扩充性和开放性&#xff1b; OS的作用主要表现在以下…

腾讯云CVM标准型S4服务器性能测评_CPU_网络收发包PPS详解

腾讯云服务器CVM标准型S4性能测评&#xff0c;包括S4云服务器CPU型号、处理器主频、网络收发包PPS、队列数、出入内网带宽能力性能参数说明&#xff0c;标准型 S4 实例是次新一代的标准型实例&#xff0c;CPU采用2.4GHz主频的Intel Xeon Skylake 6148处理器&#xff0c;腾讯云百…

2024浙大MEM提面结果已出,笔试过线率让人堪忧

众所周知&#xff0c;浙大MEM项目对于申请提前批面试并获得“优秀”资格的考生提供了“联考笔试达到国家线&#xff0c;政治成绩合格即可拟录取”的优惠政策。这一政策也成为近几年每年提面申请人数超过1000名考生参加提前批面试的重要推动力。今天&#xff0c;考生们终于迎来了…

字符编码基本介绍

基础概念 字符 任何一个文字或符号都是一个字符&#xff0c;不同的编码导致一个字符所占的内存不同。字符集 字符的集合就叫字符集。字符编码(charset encoding&#xff0c;简写为 encoding) 1. 定义字符集中的字符如何编码为特定的二进制数。2. 字符集和字符编码一般一一对…

企业架构LNMP学习笔记36

1、MySQL的负载均衡&#xff1a; 1&#xff09;在各个数据库授权远程登录用户&#xff1b; 2&#xff09;在各个数据库创建不同的识别数据库&#xff1b; 3&#xff09;配置转发规则&#xff1b; 4&#xff09;查看测试&#xff1b; 1、在各个数据库授权远程登录用户&#…

Qt6中使用Qt Charts

官方文档&#xff1a;Qt Charts 6.5.2 如果你是使用 CMake 构建的&#xff0c;则应在 CMakeLists.txt 中添加如下两行代码&#xff1a; find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(mytarget PRIVATE Qt6::Charts) 其中 mytarget 为你的项目名称。一共…

管理类联考——数学——汇总篇——知识点突破——浓度

&#x1f44a; 溶液溶质溶剂&#xff1b;浓度 溶质 溶液 \frac{溶质}{溶液} 溶液溶质​100% 溶质 溶质 溶剂 \frac{溶质}{溶质溶剂} 溶质溶剂溶质​100%。重要等量关系 ①浓度不变准则&#xff1a;将溶液分成若干份&#xff0c;每份的浓度相等&#xff0c;都等于原来溶液的浓…

Python教程(13)——Python运算符详解|算术运算符|比较运算符|逻辑运算符|位运算符

Python运算符 算术运算符比较运算符赋值运算符逻辑运算符逻辑运算类型逻辑运算本质 位运算符 Python的运算符是用于执行各种操作的符号或符号组合。它们用于操作数据并进行算术、比较、逻辑和其他类型的运算。我们所熟知的加减乘除也是运算符中的一种。Python提供了多种类型的运…

无涯教程-JavaScript - COUPNCD函数

描述 COUPNCD函数返回一个数字,该数字表示结算日期之后的下一个息票日期。 语法 COUPNCD (settlement, maturity, frequency, [basis])争论 Argument描述Required/OptionalSettlement 证券的结算日期。 证券结算日期是指在发行日期之后将证券交易给买方的日期。 RequiredMa…

spring入门之环境搭建!!!

1.创建一个maven项目。 不会配置maven环境的可以看这里&#xff1a;maven的下载安装与配置环境变量&#xff01;&#xff01;&#xff01;&#xff08;全网最详细&#xff09;_明天更新的博客-CSDN博客 2.引入依赖 <dependencies><dependency><groupId>or…

Python自动化测试框架【生成测试报告】

如何才能让用例自动运行完之后&#xff0c;生成一张直观可看易懂的测试报告呢&#xff1f; 小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前&#xff0c;我们需要下载HTMLTestRunner.py文件 点击HTMLTestRunner后进入的是一个写满代码的网页&#xff0c;小…

MySQL (2) DQL

目录 操作须知 1 单表查询 1.1 范围查询 1.2 模糊查询 1.3 去重查询 1.4 正则查询 1.5 替换查询 1.6 排序查询 1.7 聚合分组查询 1.7.1 聚合查询(只有1行) 1.7.2 分组查询(针对"聚合查询") 1.8 分页查询 1.9 拼接查询 2 多表查询 2.1 内连接 2.2 外连…

DT Paint Effects工具(一)

Paint Effects面板简介 Paint Effects工具 只是显示&#xff0c;和渲染无关 压力比例 物体绘画 模板笔刷设置 恢复默认设置 翻转管方向 平面绘画 共享笔刷 不同笔刷共享 选择笔刷 创建修改器 创建循环动画 笔刷弹簧 简化曲线路径 笔刷控制曲线 笔刷附件到曲线 生产压力曲线 自动…

C++:stack和queue的使用以及底层实现

stack和queue的使用以及底层实现 1.适配器模式2.stack的介绍和使用2.1stack的介绍2.2stack的使用 3.queue的介绍和使用3.1queue的介绍3.2queue的使用 4.仿函数介绍5.priority_queue的介绍和使用5.1priority_queue的介绍5.2priority_queue的使用 6.deque的介绍6.1deque的实现原理…

Java从入门到精通-数组(一)

0.思维导图 1.数组概述 • 1.1 数组的定义 在编程中&#xff0c;数组是一种用于存储多个相同类型的数据元素的数据结构。数组提供了一种有序的方式来组织和访问数据&#xff0c;每个元素都有一个唯一的索引&#xff0c;通过索引可以快速访问元素。 • 1.2 数组的重要性 数据…

状态管理艺术——借助Spring StateMachine驭服复杂应用逻辑

文章目录 1. 什么是状态2. 有限状态机概述3. Spring StateMachine4. Spring StateMachine 入门小案例4.1 接口测试 5. 总结 1. 什么是状态 在开发中&#xff0c;无时无刻离不开状态的一个概念&#xff0c;任何一条数据都有属于它的状态。 比如一个电商平台&#xff0c;一个订…

自动化测试的重要性:为何追求自动化?

为什么需要自动化测试&#xff1f; 代替手工重复操作&#xff0c;测试工程师可以花更多时间在设计全面的测试用例和新功能测试上 【代替手工重复】 提升回归测试的效率&#xff0c;适合敏捷开发过程 【提升回归效率】 更好的利用非工作时间执行测试&#xff0c;工作时间分析失…

油猴浏览器(安卓)

油猴浏览器页面设计非常简约&#xff0c;在主页上还为小伙伴们推荐了很多的常用书签&#xff0c;像油猴脚本&#xff0c;常用导航&#xff0c;新闻&#xff0c;热搜类的&#xff0c;快递查询等等&#xff0c;可以设置快捷访问&#xff0c;把常用到的一些网站设置在主页上。 浏览…

代码随想录Day_60打卡

①、柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 事例&#xff1a; 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;1…

Chrome 117 发布:新 Web 开发调试技巧都在这了!

简介&#xff1a;Chrome 更新了最新版本 Chrome 117&#xff0c;更新了很多实用的DevTools 新特性。 首先介绍大家最熟悉的Network面板&#xff0c;看看给我们带来了什么好玩的~ Network 面板改进 更快地在本地覆盖网页内容 现在&#xff0c;本地覆盖功能更加简化&#xff0…