令人快乐的刷题小妙招
文章平均质量分 54
小单同学shan
Hi
展开
-
单调队列优化DP + 双指针 + 贪心 + STL:multiset 综合应用
f(i):表示所有以i结尾合法划分方案的集合属性:最小划分代价以最后一个分割序列的元素个数做划分,假设最后一个分割序列的元素个数是k那么有;注:amax表示最后一个分割序列中最大的数。原创 2023-03-14 16:17:30 · 467 阅读 · 0 评论 -
acwing.342 道路与航线
该算法主要有两个步骤,首先是将原图分成若干个“块”,每个块中的点可以通过第一类边直接到达。然后对每个块运行Dijkstra算法,每次将块内的点中距离起点最近的点取出,更新其相邻点的距离。注意到相邻点可能在不同的块中,因此对于每个块,需要维护一个堆,堆中存放该块中未确定最短路径的点。接着,使用拓扑排序对所有的块进行遍历,每次从入度为0的块开始,将该块中所有点的最短路径求出来,更新相邻块的入度,若入度为0,则将其加入拓扑排序的队列中,等待遍历。最终得到每个点到起点的最短路径。原创 2023-03-07 17:37:34 · 73 阅读 · 0 评论 -
简单几步教你搞定LIS,LCS,LICS问题
LIS,LCS,LICS都是dp中的基础模型,今天在复习最长公共上升子序列问题时将这三类问题简单总结了一下描述的是给定两个数列,求两数列中的最长公共子序列长度。状态定义:f (i, j) 为以数列a的前i个数以及数列b的前j个数组成的最长公共子序列长度转移方程:f(i, j) = f(i - 1,j - 1) + 1 (i, j > 0,a[i] == b[j])f(i, j) = max(f (i - 1, j),f(i, j - 1) ) (i, j > 0, a[i] != b[j] );描述的是给定原创 2022-06-14 10:42:59 · 380 阅读 · 0 评论 -
数组模拟单链表求树的直径
来源:第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVA A组根据题意描述:如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。说明此题是一个无环图,也就是一棵树。给我们一棵树,需要我们求的是最大花费——树的直径1,先以任意点为起点找到一个距离它最远的点u2,以点u为起点找到一个最远距离即为树的直径本题n为1e5,故采用邻接表来存储图的信息。代码:...原创 2022-06-12 05:45:12 · 111 阅读 · 0 评论 -
三维bfs——地牢大师
你现在被困在一个三维地牢中,需要找到最快脱离的出路!地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过。向北,向南,向东,向西,向上或向下移动一个单元距离均需要一分钟。你不能沿对角线移动,迷宫边界都是坚硬的岩石,你不能走出边界范围。请问,你有可能逃脱吗?如果可以,需要多长时间?输入格式输入包含多组测试数据。每组数据第一行包含三个整数 L,R,C分别表示地牢层数,以及每一层地牢的行数和列数。接下来是 L个 R 行 C 列的字符矩阵,用来表示每一层地牢的具体状况。每个字符用来原创 2022-06-07 23:17:12 · 314 阅读 · 0 评论 -
图论:单元最短路&状态压缩&双端队列bfs
貌似语法题和分享文更能获取流量~写图论题像被限流了一样QAQ不管了来一波费曼学习法,兄弟们!请听我细细道来这道神奇的题目。🎁题目: 拯救大兵瑞恩1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形,其南北方向被划分为N行,东西方向被划分为M列, 于是整个迷宫被划分为N×M个单元。每一个单元的位置可用一个有序数对 (单元的行号, 单元的...原创 2022-05-26 02:04:49 · 240 阅读 · 0 评论 -
图论:单源最短路的建图方式(二分 + dijkstra/spfa/双端队列bfs)
最近考试周,一周多没写题解了。最近两天题都刷不成~ε=(´ο`*)))唉。今天抽时间做了几道题,这道题我觉得学习价值很大,囊括了很多的知识点,并且本题的建图方式也值得学习。分享给大家~🎁题目:通信线路在郊区有N座通信基站,P条双向电缆,第i条电缆连接基站 Ai和 Bi。特别地,1号基站是通信公司的总站,N号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第i条电缆需要花费Li。电话公司正在举行优惠活动。农产主可以指定一条从1号基...原创 2022-05-24 21:30:42 · 199 阅读 · 0 评论 -
小单刷题笔记之——bfs最小步数模型
🎁题目: 魔板Rubik 先生在发明了风靡全球的魔方之后,又发明了它的二维版本——魔板。这是一张有88个大小相同的格子的魔板:1 2 3 48 7 6 5我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示,这是基本状态。这里提供三种基本操作,分别用大...原创 2022-05-14 19:42:03 · 196 阅读 · 0 评论 -
棋盘分割(区间DP)
将一个8×8 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n−1) 次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。(每次切割都只能沿着棋盘格子的边进行)原棋盘上每一格有一个分值,一块矩形棋盘的总分为其所含各格分值之和。现在需要把棋盘按上述规则分割成nn块矩形棋盘,并使各矩形棋盘总分的均方差最小。均方差,其中平均值,xi为第i块矩形棋盘的总分。请编程对给出的棋盘及n,求出均方差的最小值。输入格式...原创 2022-05-07 16:16:50 · 408 阅读 · 0 评论 -
小单刷题笔记之——区间DP
🎁题目: 凸多边形的划分给定一个具有N个顶点的凸多边形,将顶点从1至N标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成N−2个互不相交的三角形,对于每个三角形,其三个顶点的权值相乘都可得到一个权值乘积,试求所有三角形的顶点权值乘积之和至少为多少。输入格式第一行包含整数N,表示顶点数量。第二行包含N个整数,依次为顶点1至顶点N的权值。输出格式输出仅一行,为所有三角形的顶点权值乘积之和的最小值。数据范围N≤50,数据保证所有顶点的权值都...原创 2022-05-06 21:50:31 · 240 阅读 · 0 评论 -
基于连通性状态压缩的DP问题——状态压缩DP
🎁题目: 炮兵阵地司令部的将军们打算在N×M的网格地图上部署他们的炮兵部队。一个N×M 的地图由NN行M列组成,地图的每一格可能是山地(用H表示),也可能是平原(用P表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从...原创 2022-05-05 22:36:51 · 257 阅读 · 0 评论 -
剑指offer35——复杂链表的复制
大家好,我是小单同学,欢迎交流指正~请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。🎁题目: 复杂链表的复制方法1:构建一个拼接链表,每次new一个新的复制节点放到原链表对应节点的后面,为什么要这么做呢?因为这样每一个节点都是前一个节点的复制品,那么我们调整random指针的时候,只需要将random指针调整到对应节点的下一个位置即可。...原创 2022-04-17 16:24:12 · 410 阅读 · 0 评论 -
小单刷题笔记之马拉松(DP/前缀和)
大家好,我是小单同学,欢迎交流指正~🎁题目: 马拉松农夫约翰对他的奶牛们的健康状况并不满意,于是给他的奶牛们报名了各种健身活动。他最喜欢的奶牛贝茜被报名参加了一个跑步班。在那里,她有希望在一场马拉松比赛中穿越约翰农场所在的城市的市中心。马拉松线路由N个检查点(编号1∼N)指定。检查点1是起点,检查点N是终点,贝茜要按顺序经过每个检查点。但是贝茜十分懒惰,所以她决定跳过其中一个检查点,以缩短她的整个行程。但是,她不能跳过检查点1和检查点N,因...原创 2022-04-14 21:03:53 · 398 阅读 · 1 评论 -
小单刷题笔记之双指针
大家好,我是小单同学,欢迎交流指正~🎁题目: 钻石收藏家奶牛贝茜非常喜欢闪闪发光的东西,她会在业余时间开采钻石。她收藏了 N 颗大小不等的钻石,她想将其中的一些摆放在牛棚的展示柜当中。为了使展示柜中的钻石尺寸大小相似,她不会将两颗尺寸大小相差超过 K 的钻石同时放在柜子中(刚好相差 K,则没有问题)。给定 K,请帮助贝茜计算在展示柜中最多可以摆放多少颗钻石。输入格式第一行包含两个整数 N,K接下来 N 行,每行包含一个整数,表示一颗钻石的尺寸。输出格式输出...原创 2022-04-12 20:02:54 · 487 阅读 · 2 评论 -
【2022第十三届蓝桥杯】c/c++ 大学c组 解题报告
大家好,我是小单同学,欢迎交流指正~ 今天上午蓝桥杯圆满落幕,准备了几个月的比赛也终于打完了。今年填空题变成了两道,根据同学们反映今年难度上升很大,小单也感觉今年难度较大hh,空了两道题。现在给大家分享一下本菜鸡的解题报告,供大家交流。仅供参考哈。目录大家好,我是小单同学,欢迎交流指正~🎁试题 A: 排列字母【问题描述】 小蓝要把一个字符串中的字母按其在字母表中的顺序排列。 例如,LANQIAO 排列后为 AAILNOQ。 又如,GOODGOODSTUDYDAYDAY...原创 2022-04-09 18:44:29 · 17153 阅读 · 87 评论 -
【蓝桥杯】交换瓶子(临阵磨枪,不快也光 一看就懂的简单图论)
加油~后天就是蓝桥杯省赛啦,预祝备考蓝桥杯的同学们都取得理想的成绩!原创 2022-04-07 17:04:28 · 647 阅读 · 4 评论 -
差分模板
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=1e5+10;int a[N],b[N];int n,m;void insert(int l,int r,int c){ b[l]+=c; b[r+1]-=c;//差分数组 插入函数 可以实现构造差分数组和区间修改的功能}int main(){ scanf(.原创 2022-04-06 21:45:13 · 516 阅读 · 1 评论 -
小单刷题笔记之数星星(树状数组)
天空中有一些星星,这些星星都在不同的位置,每个星星有个坐标。如果一个星星的左下方(包含正左和正下)有k颗星星,就说这颗星星是k级的。例如,上图中星星5是3级的(1,2,4在它左下),星星2,4是1级的。例图中有1个0级,2个1级,1个2级,1个3级的星星。给定星星的位置,输出各级星星的数目。换句话说,给定N个点,定义每个点的等级是在该点左下方(含正左、正下)的点的数目,试统计每个等级有多少个点。输入格式第一行一个整数N,表示...原创 2022-04-06 13:00:29 · 255 阅读 · 0 评论 -
树状数组模板
#include<iostream>#include<cstdio>using namespace std;int n,m;const int N=1e5+5;int s[N],tr[N];int lowbit(int x){ return x&-x;}void add(int a,int b){ for(int i=a;i<=n;i+=lowbit(i))tr[i]+=b;}int query(int a){ int re.原创 2022-04-05 21:14:53 · 341 阅读 · 0 评论 -
小单刷题笔记之航班时间(模拟)
小 h前往美国参加了蓝桥杯国际赛。小 h的女朋友发现小 h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。小 h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12小时时差,故飞机总共需要 14小时的飞行时间。不久后小 h的女朋友去中东交换。小 h并不知道中东与北京的时差。但是小 h得到了女朋友来回航班的起降时间。小 h想知道女朋友的航班飞行时间是多少。对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同原创 2022-04-05 15:05:02 · 109 阅读 · 1 评论 -
小单刷题笔记之日期问题(模拟)
问题描述小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日 至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日 或 2004 年 03 月 02 日。给出原创 2022-04-05 00:06:47 · 211 阅读 · 0 评论 -
小单刷题笔记之回文日期(蓝桥真题)
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小原创 2022-04-04 17:22:38 · 261 阅读 · 0 评论 -
小单刷题笔记之递增三元组(前缀和/二分)
今天你刷算法题了吗?原创 2022-04-04 14:32:25 · 1449 阅读 · 0 评论 -
小单刷题笔记之地宫取宝(DP)
#include<iostream>#include<algorithm>using namespace std;const int N=55;int f[N][N][15][15],w[N][N];//f[i][j][c][k]表示到i,j价值是k,拿了c件int n,m,k;const int mod=1e9+7;int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=.原创 2022-04-03 15:29:23 · 564 阅读 · 1 评论 -
前缀和模板
子矩阵的和#include<iostream>#include<algorithm>#include<cstdio>using namespace std;const int N=1010;int a[N][N],s[N][N];int n,m,q;int main(){ cin>>n>>m>>q; for(int i=1;i<=n;i++){ for(int j=1;j<原创 2022-04-02 15:38:41 · 77 阅读 · 0 评论 -
小单刷题笔记之四平方和二分解法(空间换时间)
#include<iostream>#include<algorithm>#include<cmath>using namespace std;int n,m;const int N=2500010;struct Sum{ int s,c,d; bool operator <(const Sum&t)const{ if(s!=t.s)return s<t.s; if(c!=t.c)retur.原创 2022-04-02 14:01:40 · 183 阅读 · 0 评论 -
小单学习笔记之整数二分避坑指南
给定一个按照升序排列的长度为nn的整数数组,以及qq个查询。对于每个查询,返回一个元素kk的起始位置和终止位置(位置从00开始计数)。如果数组中不存在该元素,则返回-1 -1。输入格式第一行包含整数nn和qq,表示数组长度和询问个数。第二行包含nn个整数(均在1∼100001∼10000范围内),表示完整数组。接下来qq行,每行包含一个整数kk,表示一个询问元素。输出格式共qq行,每行包含两个整数,表示所求元素的起始位置和终止位置。...原创 2022-04-01 20:24:22 · 96 阅读 · 0 评论 -
小单刷题笔记之最长不含重复字符的子字符串
从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。class Solution {public: int lengthOfLongestSubstring(string s) { int res=0,tmp=0,i; int len=s.size(); unordered_map<char,int> hash;//无序map 内部实现了一个哈希表 for(int j=0;j<len;j+原创 2022-03-29 16:12:43 · 318 阅读 · 0 评论 -
小单刷题笔记之画廊(DP)
昨天做的一道蓝桥杯国赛真题,一开始没想到DP的状态转移,暴力debug了一晚上,跑了30分,今天研究了一下DP解法,从他给的样例入手先画个图。测试样例应该就是这么走的,有可能走斜线,有可能走直线,因为两边的画是错开放的,所以从左到右一定是斜线。根据勾股定理可以写个函数来求。那状态怎么定义呢?dp[i][j]表示左边i个画完成右边j个画完成的最短距离,但是就拿dp[1][1]来说,左右各完成一个,他此时有可能在左边,也有可能在右边,我们没办法确认他在左边还是右边,缺一种状态,所以多加一种状态,...原创 2022-03-27 16:08:24 · 556 阅读 · 0 评论 -
小单刷题笔记之打印螺旋矩阵
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。class Solution {public: vector<vector<int>> generateMatrix(int n) { int tar=n*n; vector<vector<int>> mat(n,vector<int>(n)); i.原创 2022-03-24 14:15:56 · 158 阅读 · 0 评论 -
小单刷题笔记之邻接链表与割点
抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。 本题的任务是:已知网络结构,求两站点之间的危险系数。 输入数据第一行包含2原创 2022-03-23 22:41:56 · 93 阅读 · 0 评论 -
小单刷题笔记之合并二叉树
给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输出:原创 2022-03-22 22:16:34 · 106 阅读 · 0 评论 -
小单刷题笔记之排座椅(贪心+排序)
上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。原创 2022-03-20 16:08:39 · 451 阅读 · 1 评论 -
小单刷题笔记之鲁卡斯队列(浮点数比较)
题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。黄金分割数 0.618 与美学有重要的关系。舞台上报幕员所站的位置大约就是舞台宽度的 0.618处,墙上的画像一般也挂在房间高度的 0.618处,甚至股票的波动据说也能找到 0.618 的影子....黄金分割数是个无理数,也就是无法表示为两个整数的比值。0.618只是它的近似值,其真值可以通过对 5开方减去 1再除以 2来获得,我们取它的一个较精确的近似值:0.618034有趣的是,一些简单的数列中也会包含这个无原创 2022-03-19 22:30:25 · 112 阅读 · 0 评论 -
小单刷题笔记之滑雪问题(DP)
有什么学不会的,给我冲!所以递推公式应该是————maxLen(x2,y2)=max(maxLen(x2,y2),manLen(x1,y1)+1原创 2022-03-18 16:44:39 · 608 阅读 · 0 评论 -
小单刷题笔记之迷宫(bfs)
bfs较之dfs,通俗点说,我觉得bfs就像一颗石头扔进水里荡起的涟漪,一层一层的向外扩散。而dfs则是深度优先遍历每条路径。原创 2022-03-17 22:17:36 · 710 阅读 · 5 评论 -
小单刷题笔记之背包问题(DP)
题目描述小明有一个容量为 VV 的背包。这天他去商场购物,商场一共有 NN 件物品,第 ii 件物品的体积为 w_iwi,价值为 v_ivi。小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。输入描述输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。第 2\sim N+12∼N+1 行包含 22 个正整数 w,vw,v,表示物品的体积和价值。1\leq N\leq10^21≤N≤102,1\leq V \原创 2022-03-17 14:37:39 · 950 阅读 · 8 评论 -
小单刷题笔记之天平称重 (巧用进制)
题目:用天平称重时,我们希望尽可能少的砝码组合称出尽可能多的重量,如果有无限个砝码,但它们的重量是1,3,9,27..等三的指数幂,神奇的是用它们组合可以称出任意的重量。本题要求实现,用户给出重量,给出砝码组合的方案。例如:用户输入5,程序输出:9-3-1;这道题拿到以后我先自己随便写了一个暴力解法写的很乱而且很慢,就不放在上面了。思路:这道题可以往进制转换,我们把用户制定的重量转换成三进制那么我们会发现一个很有意思的规律。比如,用户输入5,转换成三进制形...原创 2022-03-16 14:38:10 · 900 阅读 · 0 评论