随笔分类 - 专业 / 题解
摘要:解题思路 设连接之后的N等于N last,w = 10 ^ (N在10进制下的长度,例如N = 5,那么w = 10) N last = N + N * w + N * (w ^ 2) + N * (w ^ 3) + ..... + N * (w ^ n) 举个例子N= 5,因为510进制的长度是1
阅读全文
摘要:560.和为k的子数组 题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums = [1,1,1], k = 2 输出:2 示例 2: 输入:nums = [1,2,3], k =
阅读全文
摘要:魔板 解题思路 如果我们可以固定一个起点,那么我们把所有的走法都枚举了,那么就得到了可以走到的所有解 但题目给的起点并不是固定的,那么有没有一种函数(方法)可以把任意起点位置转换成一个固定的起点,然后终点也可以转换的呢 也就是说把一个起点和终点变成固定的其中的对应的终点 例如: 初状态:4 6 2
阅读全文
摘要:Key Task 解题思路 分层图最短路算法 把图中的节点和状态当作一个节点而不是原图中的点和胜利大逃亡(续)是一个模型,然后因为是求最短路所以使用bfs算法来解决 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <sstream> #include<io
阅读全文
摘要:Open the Lock 解题思路 很明显从起点到终点的距离等于终点到起点的距离,那么它就是一个无向图 那么我们可以使用dbfs来进行剪枝,来优化我们的搜索 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <sstream> #include<iostr
阅读全文
摘要:Eight II A*算法介绍 迭代加深 迭代加深是一种 每次限制搜索深度的 深度优先搜索 迭代加深搜索的本质还是深度优先搜索,只不过在搜索的同时带上了一个深度 ,当 达到设定的深度时就返回,一般用于找最优解。如果一次搜索没有找到合法的解,就让设定的深度加一,重新从根开始。 既然是为了找最优解,为什
阅读全文
摘要:Eight 解题思路 因为终点状态是固定的,而从终点到起点是可以走到的,那么起点到终点也是可以走到的,因为它是一个无向图 那么我们可以把所有可以到达的状态存起来,而到达不了的输出不可能 那么我们就可以一次初始化,就得到所以情况了 代码实现 #include <sstream> #include<io
阅读全文
摘要:Fliptile 解题思路 对于这个题目可以用递推来写 因为每次翻转只会影响一个十字架的区域,所以如果我们知道第一行的情况,那么是不是只要把第一行的所有的1在对应的下一个行的相同位置进行翻转就可以把第一行的所有的1变成0呢(重要性质) 那么只要我们不断递推下去就可以得到最后一行的状态,如果最后一行全
阅读全文
摘要:M - A计划 解题思路 从起点出发进行bfs,把可以走的位置入队 但碰到了传送阵的话,需要判断是不是墙和传送阵,因为这两种情况都会让骑士找不到公主 剩下的就是正常bfs的过程 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #incl
阅读全文
摘要:Dungeon Master 解题思路 给格子编号,从1开始,这样我们就可以构建一个图 对这个图跑迪杰斯特拉算法就可以得到我们需要的答案 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #incl
阅读全文
摘要:2789.合并后数组中的最大元素 解题思路 如果数组是升序那么我们就可以得到最大的值,最大的元素就是整个数组的和 那么通过这个特例我们可以看出只要我们后面的数是一直在增大的,那么就一定可以成为数组中的最大元素 因此我们要从后面开始遍历整个数组,这样我们就可以得到我们的最大元素 //如果数组是升序可以
阅读全文
摘要:299.猜数游戏 解题思路 对出现的数字在两个数组中进行统计 先计算公牛的个数,如果有那么统计的数字的数量对应减一,因为统计是用来算奶牛的数量的 遍历统计数组,奶牛的数量加上两个数组中最小的值,因为是匹配,所以不可能多出来的也可以匹配,所以是加上其中的最小值 代码实现 int min(int a,
阅读全文
摘要:225. 用队列实现栈 解题思路 push操作是直接把元素放入队列里面 pop操作时把队列头的元素放入到队列尾,重复队列元素个数减一次 top操作就是pop加push操作 代码实现 typedef struct { int q[1001]; int l; int r; } MyStack; MySt
阅读全文
摘要:P1014 [NOIP1999 普及组] Cantor 表 解题思路 和之前的蛇蝎矩阵很像,因此可以先构建一个蛇蝎矩阵 因为是z形所以在每个奇数次矩阵的对角线进行交换就可以了,这样就得到了我们需要的矩阵 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <s
阅读全文
摘要:P4994 终于结束的起点 解题思路 通过加法同余原理可以知道f[i] % m == 0,那么f[i - 1] % m = 1,所有把f[i + 1] % m = 1转换成了f[i - 1] % m = 1的问题 那么只需要填好斐波那契数列再判断就可以了,又因为斐波那契可能会超出int的范围那么我们
阅读全文
摘要:P1012 [NOIP1998 提高组] 拼数 解题思路 要组成一个最大的整数,根据贪心的思想我们可以知道只要比较数的每一位选其中最大得就可以组成一个最大得数 但可能有些数的前几位相同,因此在选择的数的个数大于两个数时,选其中位数最短的 选择的数的个数等于两个数时选其中最长的 代码实现 #defin
阅读全文
摘要:106.从中序与后序遍历序列构造二叉树 力扣题目链接 解题思路 找到根节点在中序序列的位置 计算左子树的节点个数 开辟一个节点,并把根节点的值赋值给这个节点 根节点的左孩子和右孩子重复上面几个步骤 代码实现 /** * Definition for a binary tree node. * str
阅读全文
摘要:P5594 【XR-4】模拟赛 解题思路 重点是怎么判断是不是同一套模拟题 用一个数组来标记是不是同一套题 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h>
阅读全文
摘要:746. 使用最小花费爬楼梯 力扣题目链接 思路: 暴力递归 解题思路 把每一种可能都枚举,也就是dfs搜索每一种可能的情况,再求出其中最小的花费返回即可。 代码实现 //求两个数中的最小值 int min (int a, int b) { return a < b? a: b; } //表示从下标
阅读全文
摘要:P2872 [USACO07DEC] Building Roads S 洛谷题目链接 解题思路 这个是一个最小生成树,把在平面直角坐标系中的点定义为顶点,把两个点的距离定义为边 但这个题目并没有给出图中的边,也就是两个点的距离,因此我们要把这个图的边给补上,这个平面直角坐标系的点的每条边都是图上的边
阅读全文