11 2020 档案

摘要:题解 该题考察最短路问题,采用 dijkstra 算法,并在其基础上进行扩展。 首先是路径打印,需要记录该点具体由上一个(哪一个点)转移过来的,用 $path[]$ 数组记录(具体在更新循环中)。 如上图。 敲重点 关于如何求解路径条数和对应最短路径下的最多救援队数量,我们先看下图 设 $su[i] 阅读全文
posted @ 2020-11-26 00:04 Fool_one 阅读(447) 评论(0) 推荐(3)
摘要:题解 1、先按大写字母进行字符串分割。 2、LIS 模板直接套用就行,这时就是单词而非数字,注意存储。 想不到这一题竟然是我唯一对的一题,我也是个小人才(/(ㄒoㄒ)/~~),我想哭呀,呜呜呜~~。 #include <iostream> #include <algorithm> #include 阅读全文
posted @ 2020-11-16 00:01 Fool_one 阅读(248) 评论(0) 推荐(0)
摘要:其实并不是太想写这个感悟,虽说没什么脸面,但还是有必要写的,毕竟菜鸟还是得多反思呀。 在蓝桥杯国赛前一天晚上,自己的 QQ 号被盗了,然后群发**消息,我手速太慢,好叭,是它发的速度太快了,好多都没撤回,当时弄得心态很崩...,看来遇啥啥不顺。 在赛场上,其实个人认为做的比较小心,毕竟当时不能判呀, 阅读全文
posted @ 2020-11-15 22:52 Fool_one 阅读(158) 评论(0) 推荐(0)
摘要:题解 这个题不会证明,但是看着像是 排序 + 贪心 的做法,先按 $s + a$ 从小到大排序, 然后累加求和即可,不清楚是不是这个思路,但是网上大部分人好像就是这个思路,在此仅供一个参考。 #include <iostream> #include <algorithm> using namespa 阅读全文
posted @ 2020-11-15 21:29 Fool_one 阅读(492) 评论(0) 推荐(0)
摘要:本题没有题目,但来看题解的人都已知道题目意思了叭。 题解 枚举每一点 $(i, j)$ ,总共 $16$ 种可能性,然后 $dfs$ 判断层数 $u$,如果 $u=16$ ,说明所有点都走过了,方案数加一即可。 #include <iostream> #include <cstring> using 阅读全文
posted @ 2020-11-15 21:16 Fool_one 阅读(364) 评论(0) 推荐(0)
摘要:题解 其实该题考察的就是一个质因数分解,然后进行组合即可。 证明如下: $n=p_1^{\alpha_1} \times p_2^{\alpha_2} \times ... \times p_k^{\alpha_k}$ $d=p_1^{\beta_1} \times p_2^{\beta_2} \t 阅读全文
posted @ 2020-11-15 21:03 Fool_one 阅读(1055) 评论(0) 推荐(0)
摘要:题解 该题,内存消耗是比较大的,因为你要开至少接近 40 M的内存空间,但是对于一般机器而言还是撑得住的。 该题单纯的 dfs 是很慢的,且容易算错,所以 bfs 是一个比较好的方法,每隔一分钟所有点就向外扩展一次,然后打个标记,而统计向外扩展的次数可以在每个点预设一个值,代表它是第几次被扩展到的, 阅读全文
posted @ 2020-11-15 20:18 Fool_one 阅读(1114) 评论(0) 推荐(0)
摘要:题解 依据数据范围,暴力枚举自然不可行,则应当转变思维。 gcd(i, j) = d 表示 (i, j) 的最大公约数为 d,而 count(d) 则表示最大公约数为 d 的数对的个数,count(d) * d * d 则求解的为最大公约数为 d 的所有数的和,此时问题的核心则转化为如何求 coun 阅读全文
posted @ 2020-11-13 21:33 Fool_one 阅读(287) 评论(0) 推荐(0)
摘要:题解 该题考察经典算法,可我还是太菜了...,不会做/(ㄒoㄒ)/~~。 正解应该是 dp + 前缀和优化,只解 n == 1 或暴力 dp 都会超时,怎么看出来的呢? dp: f[i][j][k] 表示第 i 层在 [j, k] 区间搭积木的总方案数,dp 方程很显然是 f[i][j][k] = 阅读全文
posted @ 2020-11-13 00:20 Fool_one 阅读(255) 评论(0) 推荐(0)
摘要:题解 当你第一次看到这个题的时候,你会想到什么算法呢? 当要求最小步数的时候,很显然,最快想到应该是 bfs,而非其它算法,这里需要注意一点的是,从时刻 m1 到 m2,我们需要求解的是时刻差,而与具体时刻是没有关系的,此时我们就可以从 0 开始,到其它任意时刻,是可以少一重循环的。 另外 bfs( 阅读全文
posted @ 2020-11-12 16:41 Fool_one 阅读(231) 评论(0) 推荐(0)
摘要:题解 先看数据范围,n, k <= 1e6,如果采用队列解题,时间复杂度能达到 $O(n * k)$ 必定会超时。 显然,这一题应该采用数学方法,可用 $O(n)$ 的时间复杂度解决,如何解决呢? 我们先来看示意图: 这实际上是一个递推关系,f[i] 表示有 i 个人,从 1 开始报数,最后出局人的 阅读全文
posted @ 2020-11-10 16:20 Fool_one 阅读(303) 评论(0) 推荐(0)
摘要:题解 方法一:海伦公式 中学数学中,已知三角形三条边即可求解该三角形的面积,而该公式为海伦公式。 p = (a + b + c) / 2,s = sqrt(p * (p - a) * (p - b) * (p - c))。 #include <iostream> #include <cmath> u 阅读全文
posted @ 2020-11-10 15:22 Fool_one 阅读(215) 评论(0) 推荐(0)
摘要:题解: 该题也可采用双指针算法,但是有三个数啊? 这就是这一题考察的核心点所在,先枚举第一个点,另外两个点采用双指针算法,首先排序,然后去重,针对枚举第一个点,如果出现重复只取第一遍即可,后面重复元素可以直接 pass 掉。 对另外两个点,如果出现重复,可以与第一个点的做法相同,相同元素直接 pas 阅读全文
posted @ 2020-11-08 21:43 Fool_one 阅读(79) 评论(0) 推荐(0)
摘要:题解 这一题很经典,难吗?,想得到还是挺简单的。 该题的正解是 双指针 + 贪心 的策略,在其首尾各放一个指针,每次移动指针指向高度较小的数向内侧移动,在不断移动的过程中记录Max即可。 为何能保证得到最优解呢? 以图示验证算法的正确性: 这里采用反证法,先表示出最大区域面积,然后我们假设一个边长, 阅读全文
posted @ 2020-11-08 21:28 Fool_one 阅读(124) 评论(0) 推荐(0)
摘要:题解 题意相比上次奶酪工厂而言要简单很多。 做法也是一目了然的,从 2 - n - 1 中依次遍历,观察是否能删,如果能删,再用之前的一盏灯覆盖当前的灯即可,不能则不处理,这里需提前排好序。 #include <iostream> #include <algorithm> using namespa 阅读全文
posted @ 2020-11-06 00:34 Fool_one 阅读(94) 评论(0) 推荐(0)
摘要:题解 这是一道贪心题,实话说,还是挺考思维的,感觉大部分贪心都挺考思维的...。 首先这个题目的题意先要理解清楚,第 i 周 对应的单位奶酪价格为 ci,需交付 yi 的奶酪,而存储单位奶酪的价格 s 不会变化,可以进行奶酪存储。 本题的策略为: 价格比较,即之前单位奶酪的最低价 + 单位奶酪的存储 阅读全文
posted @ 2020-11-06 00:18 Fool_one 阅读(82) 评论(0) 推荐(0)
摘要:题解 这一题很显然是用栈来解决,但我还是决定写一下题解,因为最后一个有一个测试点总过不去。 首先栈中存储的是字符而不能是下标,为什么呢?,因为在匹配的过程中会出现 {[}],其实这是不匹配的,必须成对出现,即{[]},开始我应该是理解错了,用了三个栈,不过没必要。 #include <iostrea 阅读全文
posted @ 2020-11-01 17:14 Fool_one 阅读(226) 评论(0) 推荐(0)
摘要:题解 这题就是dfs......,好八,当时没什么时间,一时慌了,只过了一个测试样例/(ㄒoㄒ)/~~。 在dfs的过程中,应该传递三个参数,当前最小值 p,层数 u,累加和 sum。 p:既可以避免重复,也可以按照 >= p的形式传递。 u:打印输出的个数。 sum:判断是否等于 n,并在 > s 阅读全文
posted @ 2020-11-01 17:04 Fool_one 阅读(141) 评论(0) 推荐(0)
摘要:题解 计算几何,真心没经验/(ㄒoㄒ)/~~。 网上很多博客说这是一题模板题,也确实是,不过憋了十多分钟还是没憋出来,我是参照另一篇题解,在此就不做过多赘述,以免复制。 https://blog.csdn.net/hactrox/article/details/38397555 #include < 阅读全文
posted @ 2020-11-01 16:29 Fool_one 阅读(454) 评论(0) 推荐(0)
摘要:题解 这一题应该就是动态规划的入门题了八。 首先是状态表示,f[i] 表示以 i 结尾的最长上升子序列的长度。 其次是状态计算,在 [0,i - 1] 中寻找 aj < ai 且 f[j] 的长度的最大值,取一个 max即可,即f[i] = max(f[i], f[j] + 1),初始长度为 1 即 阅读全文
posted @ 2020-11-01 16:17 Fool_one 阅读(65) 评论(0) 推荐(0)