04 2021 档案

摘要:水模拟,顺便学习了下deque 教训是,一个很简单的题都花了很久才A。非常需要耐心,磨性子,读题理解。编码过程也因为模拟过程的烦躁,导致代码一直疏漏很多关键细节。 If you really want. 写代码,是一件很需要静下来和自己好好交流的事情 #include <iostream> #inc 阅读全文
posted @ 2021-04-30 15:46 IdiotNe 阅读(103) 评论(0) 推荐(0)
摘要:教训很多也收获不少的一道题 首先是DP状态的定义,开始一直不知道怎么下手写,后来觉得这个定义比较合适$dp(i, j)$定义为当前假设第i行全是没拔掉钉子,落在第i行第j个钉子上的钉子的数量(概率分数处理会很麻烦) 然后是数学上的两个问题: 一是概率,想当然的计算从顶向下方法数,结果测试数据一直发现 阅读全文
posted @ 2021-04-30 11:53 IdiotNe 阅读(56) 评论(0) 推荐(0)
摘要:这道题做的让自己很惭愧 一开始想不出来思路,后来只好放弃看题解却发现如此简单。就是把问题拆解为三个部分,king让谁接,在哪里接,重点设置在哪,枚举即可 预处理就是floyd算出所有节点之间距离 可是预处理的时候犯了一个很严重的错误,因为把整个棋盘为了转化为一个图,就把每个格子2维坐标降维改成一字排 阅读全文
posted @ 2021-04-29 10:11 IdiotNe 阅读(49) 评论(0) 推荐(0)
摘要:一道非常非常优秀的题目,学到了很多 首先是进一步加深对于AC自动机理解,这种将自动机看作图的思路实在是太惊艳了。理解0,理解1 此外学习了快速幂的方法,效率显著提升。快速幂 最后,关于高维数组和指针之间的关系,以及typedef具体用法进一步理解,还有指针、函数、数组三种声明的解析 美中不足的是粗心 阅读全文
posted @ 2021-04-28 13:30 IdiotNe 阅读(42) 评论(0) 推荐(0)
摘要:终于来到AC自动机训练,关于AC自动机可以专门开一个post来详述,之后补上 模板题,彻底弄清kuangbin大神的模板后,自己复现了下才发现还是需要很多训练巩固这么精妙的算法 #include <iostream> #include <algorithm> #include <queue> #in 阅读全文
posted @ 2021-04-27 20:00 IdiotNe 阅读(47) 评论(0) 推荐(0)
摘要:数字塔,非常舒服的DP,自底向上的递归搜索填表,非常归整 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio> #include 阅读全文
posted @ 2021-04-26 22:30 IdiotNe 阅读(33) 评论(0) 推荐(0)
摘要:简单的dp。状态定义好就迎刃而解,令$dp(i, j)$为第$i$种花必须在第j个花瓶,且满足条件的最大aesthetic value。 状态转移方程也很好想,估计了下时间复杂度发现没问题,就着手实现了 #include <iostream> #include <algorithm> #includ 阅读全文
posted @ 2021-04-26 22:15 IdiotNe 阅读(38) 评论(0) 推荐(0)
摘要:最开始DP思路大方向是对的,但是一直苦于状态不知道怎么表示。 略览下题解思路,状态压缩,用是经常用,之前也联系过,实战上还是显出生疏了,对这么常用的技巧竟然一时没想起来 真正写代码的时候也磕磕绊绊debug了很久,一边怕数组越界,一边担心数组开爆,但最后数组还是开小了,RUNTIMEERROR好久 阅读全文
posted @ 2021-04-26 21:22 IdiotNe 阅读(43) 评论(0) 推荐(0)
摘要:这道题的题目叙述着实唬人,感觉太多无关信息了 不过说来惭愧,偷了个小懒去看了下别人怎么翻译的,这部分小痛苦直接跳过了 简单DFS应用 #include <iostream> #include <algorithm> #include <queue> #include <string> #includ 阅读全文
posted @ 2021-04-24 21:34 IdiotNe 阅读(38) 评论(0) 推荐(0)
摘要:八皇后问题的变体,N皇后问题,dfs+回溯即可 真正实现的时候还是遇到了点问题,递归式边界返回条件,一定要等到row已经到N之外才可以,因为这才意味着第N行的点也通过了考验,搜索到第N行并不意味着结束,还有相当关键的临门一脚(感觉对这个问题还有代码是一个双关) #include <iostream> 阅读全文
posted @ 2021-04-23 21:54 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:经典的八皇后问题的变种(可以称之为四车问题,手动doge),并利用状态压缩帮助优化,不过开始思路方向错了,或许说不合适更好些,状态记录的是可以防止棋子的地方的状态,但是这样即使状态压缩以后,相关记录数组也是大的不可接受(OJ上一直RUNTIEMERROR) 后来浏览解决状压数组太大问题,概览发现用了 阅读全文
posted @ 2021-04-23 21:12 IdiotNe 阅读(42) 评论(0) 推荐(0)
摘要:很简单的题,不过题面信息冗余,要快速抽取信息 快速复习了一边Floyd算法 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio> 阅读全文
posted @ 2021-04-23 16:18 IdiotNe 阅读(44) 评论(0) 推荐(0)
摘要:这道棋盘题还是挺经典的,问题在于被一个新奇点子卡住好久。 本质上,这道题是一个棋盘中的哈密顿链路问题,这道题一个很经典的优化思路(很多人尝试,都A了),整个棋盘是否存在哈密顿链路,取决于A1是否存在(因为这道题要求的字典序,所以从这里开始找到一定是最优解),但是问题在于,如何将整个图的哈密顿链路存在 阅读全文
posted @ 2021-04-23 15:17 IdiotNe 阅读(71) 评论(0) 推荐(0)
摘要:一道非常有意思的题 小时候看书看到过这种迷宫走法 整道题可以分为两个部分讨论: BFS部分,很简单,而且由于图的设置,使得这道题没什么难度 模拟这种迷宫走法的部分,开始很不好想关于这种转向的走法,后面取巧这么设置(以左墙寻路为例): 首先,决定下一步的step变量,按着索引递增,四个方向设置成逆时针 阅读全文
posted @ 2021-04-22 11:13 IdiotNe 阅读(40) 评论(0) 推荐(0)
摘要:思路还是很清晰的,就是三维空间中运用BFS的方法,中间不幸WA过两次,问题出在这里:因为想要将dungeon的周边铺满'#',这样做的好处就是判断移动的下一步是不是还在dungeon内,可以不用一组较为耗时的不等式,不过隐患在于三维空间中,一定要记住不重不漏的填补'#',此外,填充的顺序也至关重要, 阅读全文
posted @ 2021-04-21 22:51 IdiotNe 阅读(60) 评论(0) 推荐(0)
摘要:一道联系参考价值不是很大的题 BFS,DFS搜索都是OK的,但是不要想着利用vis数组在进行什么优化了,因为这个Runtime Error了好几次,再去看discuss里的千奇百怪过样例(比如把输入原原本本回到输出就A了,可能和特判设置有关) 其实最建议的办法就是打表。 #include <iost 阅读全文
posted @ 2021-04-21 21:37 IdiotNe 阅读(41) 评论(0) 推荐(0)
摘要:福利题,此前做过类似的DP,思路很简单,定义状态$dv(i, j)\(为以\)(i, j)$为起点的最长长度 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> # 阅读全文
posted @ 2021-04-21 20:31 IdiotNe 阅读(33) 评论(0) 推荐(0)
摘要:期间用了DP(可能更有些贪心的思想的算法),但是一个细节错误一直没有考虑 总体思路是这样的,按照每个区间的上界排序,然后从头到尾,定义$dv(i)$为前i个最少需要的并行数量 每次状态转移,从后向前搜索,每当发现当前区间$i$的下界比之前的区间的上界$seg[j].e$要小,说明二者必定重叠,直到遇 阅读全文
posted @ 2021-04-21 20:02 IdiotNe 阅读(46) 评论(0) 推荐(0)
摘要:小心分析,大胆行动,再思即可。 DP问题,开始尝试dp(i, j)设置为状态:必须以dp(i, j)为右下角的最大subarray,后来发现这样的状态转移基本无解,再放开一些,多加一个维度,考虑以(i, j)为右下角,且i所在维度长度看作新的维度,这样问题就解决了 #include <iostrea 阅读全文
posted @ 2021-04-21 16:58 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:做题时候陷入一个误区,就是担心出错不敢想,不敢写,这道题入手思路是对的,但是畏首畏尾,自己规定时间写不出来,大略览了他人题解发现自己思路是对的才敢开始着手写,学会分析和对自己有自信是练习的一个很重要的指标兼目标 题目就是利用DP搜索,不过这道题没给出贷款,费用值的范围是一个很不应该的地方,因为这涉及 阅读全文
posted @ 2021-04-21 15:25 IdiotNe 阅读(41) 评论(0) 推荐(0)
摘要:问最短路径,所以上来就可以考虑BFS 繁杂的部分在具体问题实现细节,借助这道题正好顺手学了线性求素数筛子,模板如下: for (int i= 2; i<= maxl; ++i){ if (!chk[i]){ prime[tot++]= i; } for (int j= 0; j< tot; ++j) 阅读全文
posted @ 2021-04-20 22:23 IdiotNe 阅读(36) 评论(0) 推荐(0)
摘要:很经典的两个杯子互相倒水操作的问题 忍住不下意识点开discus,虽然有些不适应,不敢放开手脚,但是真正提升码力,做到写出来的代码能有自信和把握。 细节很多,审题极其重要 简单的BFS #include <iostream> #include <algorithm> #include <queue> 阅读全文
posted @ 2021-04-20 12:47 IdiotNe 阅读(37) 评论(0) 推荐(0)
摘要:最近做题养成了一个不太好的习惯,习惯性的先去看discuss有没有坑,越是惧怕错误越可能出错,之后的锻炼,出错再去check discuss吧 简单的BFS #include <iostream> #include <algorithm> #include <queue> #include <str 阅读全文
posted @ 2021-04-20 10:15 IdiotNe 阅读(37) 评论(0) 推荐(0)
摘要:这题真实水的无与伦比的快乐,当然中间debug稍微浪费了点时间。很简单的DFS #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio 阅读全文
posted @ 2021-04-19 22:24 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:开始规划思路,一开始想错了,直接想着用BFS解决,对于这两者的理解也因为这更深刻了些。 BFS寻求源点到目的地的最短距离,而DFS才适合于这种树全搜索情况(当然更符合DFS的应用应该是算法导论上的拓扑排序以及相关连通分量) 这道题思路很简单,但是调试过程太曲折了,期间很多细节都没有重视,比如在搜索的 阅读全文
posted @ 2021-04-19 22:03 IdiotNe 阅读(48) 评论(0) 推荐(0)
摘要:这么多天其实被BFS DFS各种神仙延申搞得人欲罢不能 来到水题轻松切一下 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio> 阅读全文
posted @ 2021-04-19 19:42 IdiotNe 阅读(31) 评论(0) 推荐(0)
摘要:贪吃蛇问题,因为图的复杂性,为了空间效率,这时候就要考虑利用状态压缩来处理。 算法倒是没有多复杂,但是非常考验码力,耐心,中间很多细节小错误(循环,判断顺序) 开始状态压缩想的麻烦了,经过思考,将状态压缩集中到贪吃蛇形状,以及利用贪吃蛇的连贯性,就可以大大节省效率 #include <iostrea 阅读全文
posted @ 2021-04-19 17:14 IdiotNe 阅读(42) 评论(0) 推荐(0)
摘要:有些代码往往需要编码者一定能坐的了板凳,这道题在大佬眼里可能不算啥,但是自己这方面能力真的有待提升,压得住性子写下去 题目本身思路很简单,只不过写起来变量名繁多,中间多次错误,数据也看不出来,最后还是借助对拍别人的AC代码才敢确定。 这是一个需要锻炼的能力以及理想的写代码的境界,即,一个复杂的代码写 阅读全文
posted @ 2021-04-18 23:04 IdiotNe 阅读(50) 评论(0) 推荐(0)
摘要:利用dfs搜索,自己尝试想了好久没有理解,最后还是按照别人的题解写出来一份,中间有一些必要的剪枝优化 后面使用桶排序的思路,将原有代码大幅优化 #include <iostream> #include <algorithm> #include <queue> #include <string> #i 阅读全文
posted @ 2021-04-18 17:01 IdiotNe 阅读(49) 评论(0) 推荐(0)
摘要:坦克大战,童年回忆 这道题比较特殊的在于砖墙的出力,很明白的就可以想到距离变为2,然而这样在使用BFS寻求最短路径的时候违背了一个原则,算法导论上有这部分详细介绍,就是关于每时每刻队列内是一个单调不减的数列,此外,头和尾插值最大为1,一次推入一个距离为2的,会破坏BFS这些性质,所以想了一个这种的方 阅读全文
posted @ 2021-04-16 21:05 IdiotNe 阅读(44) 评论(0) 推荐(0)
摘要:BFS可以延伸的应用变化繁多,这道题配合状态压缩共同解决,不过时空复杂度还可以进一步优化。 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include < 阅读全文
posted @ 2021-04-16 13:02 IdiotNe 阅读(38) 评论(0) 推荐(0)
摘要:这道题提交的时候都战战兢兢,一道核心思想为BFS的题目也可以出的这么刁钻 这道题一个非常亮点的地方,在于求的是线段数目最短,而不是路径长度最短,最开始一直WA在这里了(一个最短路径也许会很曲折的拐很多弯,而线段数目最短也许走的很远,但实际上线段数目少) 这就给BFS使用出了一个大难题,因为如果还按照 阅读全文
posted @ 2021-04-15 22:37 IdiotNe 阅读(209) 评论(0) 推荐(0)
摘要:真的是一道非常好的习题 首先输入读取上,详见代码可以看到两处trick。一个是格式化字符串中结尾的\n,会在读取到我们所需的之后,将停留在缓存区中的空格(对于只要数字的scanf,POJ discuss处可以看到此处坑了很多人,只读入数字的scanf可以用这种技巧解决这个问题),另一个则是%[^\n 阅读全文
posted @ 2021-04-14 22:03 IdiotNe 阅读(40) 评论(0) 推荐(0)
摘要:稠密图,如此前博客所总结的,稠密图使用Prim #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #include <cstdio> #include <cstr 阅读全文
posted @ 2021-04-14 13:34 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:此前做过思路类似的,很明显的Kruskal,将一个森林逐渐并成一颗树 又是一个玄学问题,当时写读取顺手写了一个对于多组输入或是单组输入都适用的while写法,不过反而WA了,以后还是具体问题具体分析吧 #include <iostream> #include <algorithm> #include 阅读全文
posted @ 2021-04-14 12:41 IdiotNe 阅读(33) 评论(0) 推荐(0)
摘要:再次因为浮点数g++, c++编译器的问题WA,中间还因为reset没有改过来编译器无脑再WA了一次 这道题很适合Kruskal这种将最开始的联通森林,一点点聚合到一起成为一棵联通的最小生成树的想法,只不过,具体到这道题,是要将原先的p个森林,聚合成为s个森林,所以实现就非常简单了 #include 阅读全文
posted @ 2021-04-13 21:56 IdiotNe 阅读(40) 评论(0) 推荐(0)
摘要:关于刷OJ时经常很多人出现输出格式错误的问题,最好的解决方案是把测评过程自动化解决,不仅提高效率节省人力,机器严谨的检验也比人肉眼看不出疏漏靠谱,特此记录一下构建的自动评测脚本。当前先记录windows下的脚本 @echo off if exist [your_program_name].exe ( 阅读全文
posted @ 2021-04-13 20:21 IdiotNe 阅读(374) 评论(0) 推荐(0)
摘要:做题的感受,稠密图的MST问题还是推荐使用Prim算法,尤其是这种完全图,直接设置dist函数计算距离而非实现构建好一个数组计算时间上没什么差别(此题)空间上优化 #include <iostream> #include <algorithm> #include <queue> #include < 阅读全文
posted @ 2021-04-13 20:16 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:这道题的教训好惨痛.... 首先是由于想当然,导致记录边长的数组大小下意识开成了节点数的大小,直接导致一直RE 此外,关于模板,还是要具体问题具体分析,像这道题,开始利用一个模板中记录已知连通分量的想法以此优化,期望提前结束循环。结果表示是不合适的(1 WA),好在快速反应过来这个问题。 思路很清晰 阅读全文
posted @ 2021-04-13 15:09 IdiotNe 阅读(37) 评论(0) 推荐(0)
摘要:prim算法在这道题上应该是领先Kruskal算法一个数量级的(这道题的是一个稠密图,边的数量为$V^2$。 比较玄学的是,代码g++ WA, c++ A了,可能是编译器对于浮点数有不同程度的优化吧 另外,在本地做的时候,遇到了一些小bug,解决之后的心得是,循环过程中的初始化阶段很重要 #incl 阅读全文
posted @ 2021-04-12 14:04 IdiotNe 阅读(40) 评论(0) 推荐(0)
摘要:Kruskal模板题,需要注意,这道题空间限制很严格,第一遍下意识的开了一个记录数组(因为一对节点之间允许多条路经,这里想着进行优化,不过弄巧成拙了,遇到了第一个MLE) #include <iostream> #include <algorithm> #include <queue> #inclu 阅读全文
posted @ 2021-04-11 22:58 IdiotNe 阅读(39) 评论(0) 推荐(0)
摘要:大赛的题,题目叙述往往很花哨,考验阅读的准确获取信息和凝练能力 做这道题吃了很多系统知识不熟悉的亏,遇到了很多RE和TLE。 RE是因为想用一个类来保存,但是可惜这道题数据太大,开了GDB进去才发现segment fault的问题 TLE就非常玄学,后面参考Kuangbin的思路重新写才卡时间过。思 阅读全文
posted @ 2021-04-11 14:29 IdiotNe 阅读(41) 评论(0) 推荐(0)
摘要:之前在POJ做过另外一道类似货币判断负环的问题,感觉那个更有挑战性也更富有变化些 这道题因为是有多组输入,为了避免一直初始化清空之前运算时用过的变量,同时也为了利用SPFA方式(从代码实现的间接性和容易成程度,应该原始的BellmanFord而非优化后的SPFA算法更合适)尝试利用类进行管理 #in 阅读全文
posted @ 2021-04-09 20:40 IdiotNe 阅读(49) 评论(0) 推荐(0)
摘要:Floyd这个算法写起来真的快乐和精妙 一开始下意识的就选择利用DFS的拓扑排序去解决,但是这样发现实现起来非常复杂,找数据的时候看到了有人提floyd,瞬间这道题就简单了。 正序逆序一遍,一个可以确定rank的奶牛必定保证正序(可以打败的人数)逆序(会被打败的人数)和为n-1 #include < 阅读全文
posted @ 2021-04-09 13:39 IdiotNe 阅读(37) 评论(0) 推荐(0)
摘要:一道水题就这么不幸贡献了两发WA,原因在于没有审题啊。关于输出要求,人家明确说了第一个到其他的距离 题目信息量略大(低情商:废话过多),很简单的最短路,因为没有仔细读题错误理解成了所有节点对最短路径的最大值。采取了floyd算法,不过时间复杂度很小,并无大问题。 此外,初始化,以及对于输入数据读取都 阅读全文
posted @ 2021-04-09 09:49 IdiotNe 阅读(42) 评论(0) 推荐(0)
摘要:这几天转去尝试做leetcode,意外发现其实leetcode题做做还是挺有收获的,不过感觉OJ做起来收获更大些,这两个还是结合起来做好点。 这道题思路还是比较清晰的,利用bellman ford的思路,不过因为图可能不连通,所以参考kuangbin大佬的思路加了一个“超级源”(因为此题只需要判断负 阅读全文
posted @ 2021-04-08 22:07 IdiotNe 阅读(34) 评论(0) 推荐(0)
摘要:Bellman-ford算法的队列优化,SPFA的应用,数据结构和算法结合真是太精妙了 当然这道题不幸贡献了两发WA,原因是我愚蠢的忘记了货币值的数组应该开成浮点数,第二次则是因为输出没有'\n'(这个题目的叙述很不好,这样结尾根本没法判断有无换行符) #include <iostream> #in 阅读全文
posted @ 2021-04-05 22:52 IdiotNe 阅读(38) 评论(0) 推荐(0)
摘要:下意识想到了Floyd算法,不过在寻找数据的时候才发现没有仔细分析时间复杂度的弊端(也可能是因为自己这方面的能力弱,所以抵触去分析时间复杂度) 利用刘汝佳的模板,dijkstra是可以满足时间复杂度要求的解法。此外,单源最短路径和单“汇”最短路径其实是对称的问题(正是本题需要dijkstra同时求解 阅读全文
posted @ 2021-04-05 15:04 IdiotNe 阅读(41) 评论(0) 推荐(0)
摘要:求路径中最小值的最大值,应该可以利用网络流的方法解决,不过这道题就利用了dijkstra的方法解决了。 此前POJ 2253利用Floyd方法解决的思路应该也可以应用到这种方法上来 #include <iostream> #include <algorithm> #include <queue> # 阅读全文
posted @ 2021-04-05 11:08 IdiotNe 阅读(49) 评论(0) 推荐(0)
摘要:这道题可以看作一个DAG(有向无环图)上的DP。 不幸贡献一个WA,这个问题在最初考虑是考虑到的,就是以其中两个维度做底,但是长和宽是相对的。也就是在初始构造“图”的时候,比较两个block的底时忽略了其实有两种比较方法,可以看下代码的Init中关于图构建分支条件。 #include <iostre 阅读全文
posted @ 2021-04-04 09:31 IdiotNe 阅读(68) 评论(0) 推荐(0)
摘要:主元素算法,线性复杂度,比较机智的思路,简单说就是维持计数,相同的就+,相异就-,计数为0记录新的数 #include <iostream> #include <algorithm> #include <queue> #include <string> #include <vector> #incl 阅读全文
posted @ 2021-04-03 20:01 IdiotNe 阅读(31) 评论(0) 推荐(0)
摘要:DP关键也是难点在于如下几个地方 状态定义,需要满足无后效性以及最有子结构 状态的转移需要合理的定义以及简化 关于边界条件需要讨论好,满足递归过程中的循环不变式是一回事,但是边界条件中的基本式也需要满足 这么一道很简单的题,前面想复杂(状态想出来但是不知道怎么和所求最优解联系)再到后面因为初始化没考 阅读全文
posted @ 2021-04-03 19:44 IdiotNe 阅读(59) 评论(0) 推荐(0)
摘要:一开始的思路错误了,想着利用贪心策略自然的转到了dijkstra或Prim。 因为想要学习堆优化所以想去借鉴kuangbin大佬模板,结果看到思路的一道解析才知道自己多粗浅,若是起初选择贪心的策略,对于后续距离优化你是看不出积累优势的,反而可能因为你起初贪心了几步,导致离最终的目的地跑远乃至于后期不 阅读全文
posted @ 2021-04-02 21:51 IdiotNe 阅读(40) 评论(0) 推荐(0)
摘要:本来很简单一道题 开始想复杂了,最初想法其实就是顺畅的DP思路,但是以往做的DP,都是DP的终点就是我们所求的最优解。所以一开始没了思路,等看到Kuangbin大神的代码,就看他简述的思路就知道自己最初的思路是正确的。教训有两个吧,一个是僵硬的求“正确的”做法,一个是没有培养自己分析时间复杂度的习惯 阅读全文
posted @ 2021-04-02 13:15 IdiotNe 阅读(42) 评论(0) 推荐(0)
摘要:最近为了准备那个关于图算法的项目,一直看算法导论看的晕乎,还是尧师父说的在理,上手写代码才能发现问题有助于水平提高 这道题是一道DP,原本不太好想,不过题目限定老鼠奔跑只能从奶酪数低的往奶酪数高的洞跑,这样就可以定义出一个无后效性的状态,即,从(i,j)节点开始跑最多可以得到多少。 #include 阅读全文
posted @ 2021-04-01 22:54 IdiotNe 阅读(39) 评论(0) 推荐(0)