随笔分类 -  OI刷题之路

狂奔的弱鸡qwq
摘要:数论 我们考虑一个数x,如果她是一个合法解,那么她一定是d的约数(lcm(c,x)== d) ,又因为一个数 i 的约数个数远小于 sqrt(i);所以说我们可以枚举d的约数,check一下就好了2333333333333333333; code: include include include i 阅读全文
posted @ 2018-09-26 19:32 Splitor 阅读(152) 评论(0) 推荐(0)
摘要:打表 这道题一看只输入一个变量,并且感觉反素数应该不会太多,就打一打看看,发现确实很少,打出来就好了!! 直接N sqrt(N)打出表。 code: include using namespace std; int p[500]={1,2,4,6,12,24,36,48,60,120,180,240 阅读全文
posted @ 2018-09-26 17:00 Splitor 阅读(205) 评论(0) 推荐(0)
摘要:筛法||暴力 这道题是可以用筛法,先筛出2 sqrt(N)内的质数,然后让这些质数去筛掉L R内的合数,就行; ~~但我们显然不能向正解屈♂服~~ 我们用判断大质数的利器:M R算法,高效的判断一个数是否是质数,复杂度(R L+1) log(R L+1); code: include include 阅读全文
posted @ 2018-09-26 15:51 Splitor 阅读(425) 评论(0) 推荐(0)
摘要:刷了一个月的蓝紫题,该刷刷~~黑题~~绿题,黄题了。。。。。(但我觉得数学好难啊) 单子 1、gcd,lcm,打表 2、exgcd,费马小定理 3、各种筛 4、排列组合,容斥原理,概率与期望 5、卡特兰数 6、快速幂 6、M R 算法 7、素数的常见性质 8、矩阵 9,EXCRT,CRT 下边放板子 阅读全文
posted @ 2018-09-25 21:09 Splitor 阅读(446) 评论(0) 推荐(0)
摘要:休闲题 一道大水题,直接枚举每个点作为驻扎地,然后利用前缀和求出答案,取max就好了,复杂度(O(N^3)) ~~(要不是标签是蓝色我2min内绝对能切掉,假的难度导致我思考的过于复杂,7min才想出来)~~ include include include include include inclu 阅读全文
posted @ 2018-09-25 20:52 Splitor 阅读(449) 评论(0) 推荐(0)
摘要:码力+树论 我用的树链剖分版。有一个结论需要记住:一个严格次小生成树只与最小生成树的一条边不同,我们考虑枚举每一条没有加入到最小生成树中的边,如果将其加入,能够影响到边的两个端点的lca(整个区域将变为一个环),所以我们要删除一条最大的边,如果最大的边与其相等,那么删除一条次大的边。以此类推,最后求 阅读全文
posted @ 2018-09-25 19:36 Splitor 阅读(190) 评论(0) 推荐(0)
摘要:带限制的最短路 这道题是我做的第一个带限制的最短路题,所以许多细节我思考了好长时间~~并看了题解~~才会的。 首先我们关注条件:机器人无限个,所以我们可以认为有无限个机器人从1号点同时出发。摧毁一个点的代价为max(到达他的代价,破坏他的所有的保护器的代价);所以我们可以开三个数组和一个vector 阅读全文
posted @ 2018-09-25 15:06 Splitor 阅读(221) 评论(0) 推荐(0)
摘要:A 算法 这道题目我只得了80分qwq,因为我的hash表炸了。。。。。 思路: 估价函数就是空格到达要移动的棋子的距离的曼哈顿距离,hash时只需要hash两个坐标:空格坐标和要移动的棋子。之后压入优先队列,bfs就好了 收获: hash局面时要尽量的优秀,节省空间。注意题目的转化,写出尽量优美的 阅读全文
posted @ 2018-09-23 20:02 Splitor 阅读(172) 评论(0) 推荐(0)
摘要:K短路,A 新鲜出炉的A A 是什么,其实就是bfs,只不过加了一个估价函数h(x),并把队列换成了优先队列。令h(x)==已经花费的代价,f(x)=g(x)+h(x),,那么f(x)就是优先队列的比较标准。这样我们就会尽可能向最优解的方向搜索,我们如果想要求最优解,就跑A ,每次扩展状态,压入队列 阅读全文
posted @ 2018-09-22 11:41 Splitor 阅读(127) 评论(0) 推荐(0)
摘要:矩阵快速幂+倍增floyd 这道题十分神啊,floyd与矩阵快速幂(思想)结合。 矩阵快速幂的原理与普通快速幂一样,因为矩阵乘法满足交换律。 而这道题是让我们求从s出发恰好经过k条边(k =1; } include include include include include include in 阅读全文
posted @ 2018-09-22 10:14 Splitor 阅读(127) 评论(0) 推荐(0)
摘要:tarjan缩点+最短路 这道题我想了一半的正解,就是缩点+DAG上考虑,之后图只有一种情况:1号点连着大量的点,大量的点连着1号点,部分能到达1号点的点连接着1号点能到达的部分点。转向就是要从1号点能到达的点过渡到能到达1号点的点。考虑spfa,在缩完点后的图上从1号点正向跑最大路,再建立一个反图 阅读全文
posted @ 2018-09-21 21:29 Splitor 阅读(193) 评论(0) 推荐(0)
摘要:spfa+dp; 显然,最短路上的公共路径一定是连续的。这道题我一开始too young too simple 地进行了暴力dp,结果T了。。。。。。 55分code: // luogu judger enable o2 include include include include include 阅读全文
posted @ 2018-09-21 09:39 Splitor 阅读(226) 评论(0) 推荐(0)
摘要:区间dp+最短路。 这一道题一开始没有思路,但观察了一下数据范围,果断大力dp。我们先用N^3logN 的复杂度预处理出 所有区间的最短路(就是区间内不改变路径的最短路),然后区间dp,dp转移方程为:f[i]=max(f[i],f[j]+k+(i j+1) cost[j,i]) (1 includ 阅读全文
posted @ 2018-09-21 06:56 Splitor 阅读(270) 评论(0) 推荐(0)
摘要:特殊的计数问题 这道题不同于之前,之前都是满足 条件的数有多少个,现在是统计某个小数字在所有的数字中出现了几次。 考虑暴力(以1为例子): 0 1 2 3 4 5 6 7 8 9 1 0 1 2 3 4 5 6 7 8 9 我们只要枚举每一位的每一种可能,然后记录组成的数中1出现了多少次,就可以了。 阅读全文
posted @ 2018-09-20 17:38 Splitor 阅读(132) 评论(0) 推荐(0)
摘要:我自己居然写对了!!!! 这道题目我们要充分考虑所有情况。首先要求三位连续的相同,我们开一个bool变量,来记录是否已经满足了条件。有一个小细节: if (len include include include include define int long long using namespace 阅读全文
posted @ 2018-09-20 17:37 Splitor 阅读(136) 评论(0) 推荐(0)
摘要:我真是太弱了!!!!!! 显然的数位dp,一开始我too young too simply的用dp[i][j]表示考虑到了第 i 位,且这一位的数是j的数量。但是,经过SMc的指点后,我发现这个沙雕的方程具有后效性,因为我们要保证每一位数与其相邻的数的绝对值之差大于等于2,我的做法就无法考虑下一位, 阅读全文
posted @ 2018-09-19 22:28 Splitor 阅读(133) 评论(0) 推荐(0)
摘要:大水题 我真是太蒟蒻了,这种水题居然20分钟没想出最优解,数据结构学傻了qwq 这道题直接二分能选到哪个订单,每次利用差分数组O(n)修改,O(n)查询,总复杂度nlogn。 收获:注意思维的锻炼,明天开始刷dp练思维 阅读全文
posted @ 2018-09-18 21:22 Splitor 阅读(115) 评论(0) 推荐(0)
摘要:线段树,枚举,暴力 ~~写的头皮发麻......~~ 对于每一次跑动(u,v)显然,我们需要对(u,lca),(lca,v)分别处理。为什么?考虑每个点 i 能得到的贡献,一种是从以它为根的子树跑上来,另一种是路径的终点在它的子树中。第一类:d[s] d[i]=w[i],得到式子:d[s]=d[i] 阅读全文
posted @ 2018-09-18 15:45 Splitor 阅读(202) 评论(0) 推荐(0)
摘要:其实在tzt版线段树的基础上稍微加一些东西就好了。我们不预先开点,每当需要用到一个点时,我们才开。空间复杂度可以优化到 m(查询)log n。 code(线段树1,其实这道题用动态开点没啥意义没啥意义,当作练习) include include include include include inc 阅读全文
posted @ 2018-09-17 09:58 Splitor 阅读(948) 评论(1) 推荐(0)
摘要:拓扑排序的运用 这道题目其实要加入线段树优化建边,但是本蒟蒻不会。说一下简化版。我们自然可以想到拓扑排序。就是令u v表示u大于v,然后利用题目给予的信息加边,最后拓扑上dp就可以了。dp过程:令所有点的初始值设为1e9,在拓扑的过程中为未知的点赋值,如果发生冲突则不能。但是边太多,需要优化,我们要 阅读全文
posted @ 2018-09-16 19:28 Splitor 阅读(234) 评论(0) 推荐(0)