各种算法or技巧总结
deebcjrb
这个作者很懒,什么都没留下…
展开
-
各种题类型总结---栈
思路1:用队列+栈的方法,一个是先进先出,一个是先进后出,正好互补。思路2:将前半段放入栈中,与后半段进行对比。原创 2022-09-28 16:35:40 · 446 阅读 · 0 评论 -
HDU-2586 How far away(LCA)模板
http://acm.hdu.edu.cn/showproblem.php?pid=2586dis[a]为根节点到a的距离那么2个节点的最短距离就是dis[a]-dis[b]-dis[lca(a,b)]*2参考邹老板子,存一下。倍增法:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MX=40005;struct node{ int ch,dis;};vec原创 2020-08-17 18:47:07 · 135 阅读 · 0 评论 -
回味尺取法(下)例题:poj3320
例题:http://poj.org/problem?id=3320题目大意:jessica开始读一本很厚的书,需要把书中所有知识点都掌握,这本书总共p页,第i页恰好有一个知识点ai,(每个知识点都有一个整数编号)全书中同一个知识点可能会被多次提到,所以他希望通过阅读其中连续的一些页把所有的知识点都覆盖到,给定没有人写到的知识点,求出阅读的最少页数。样例:p=5,a={1.8.8.8.1},...原创 2020-04-07 17:33:22 · 203 阅读 · 0 评论 -
回味尺取法(上)(有白书例题)
例题:给定长度为n的数列整数a0,a1,a2,an-1,以及整数s,求出总和不小于s的连续子序列的长度的最小值,如果不存在输出0.尺取法的思路:(1)以s=t=sum=0初始化。(2)只要有sum<s,就不断将sum增加at,并将t增加1.(3)如果(2)中的要求无法满足sum>=s则终止,否则的话更新res=min(res,t-s)(4)将sum减去as,s增加1...原创 2020-04-06 23:11:53 · 107 阅读 · 0 评论 -
日志统计[蓝桥杯2018初赛](尺取法)
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id。表示在ts时刻编号id的帖子收到一个"赞"。现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该...原创 2020-03-09 20:09:42 · 391 阅读 · 2 评论 -
STL--nth_element(取容器中第n大值)
在c++的stl库中,提供了nth_element这样一个函数它的用法是nth_element(a+l,a+k,a+r)这样它会使a这个数组中区间[l,r)[l,r)内的第kk小的元素处在第kk个位置上(相对位置)但是它并不保证其他元素有序!#include<iostream>#include<algorithm>using namespace std...原创 2020-01-17 23:17:35 · 252 阅读 · 0 评论 -
to-string()函数(将数字转化成对应的字符串)
小技巧,用法cin >> n;string str,t;t = to_string(n);头文件为#include<string>原创 2020-01-15 19:47:53 · 733 阅读 · 0 评论 -
字符串删除特定字符
感觉挺新颖的想法,记下来吧void delete_char(char str[],char target){ int i,j; for(i=j=0;str[i]!='\0';i++){ if(str[i]!=target){ str[j++]=str[i]; } } str[j]='\0';}原创 2019-12-14 22:54:27 · 88 阅读 · 0 评论 -
欧拉回路
欧拉道路:除了起点终点外,其他点的度数应该是偶数。有向图结论:最多只能有两个点的入度不等于出度,而且必须是其中一个点的出度恰好比入度大一,(作为起点),另一个的入度比出度大一(作为终点),当然,还有一个前提条件,在忽略边的方向后,图必须是联通的。下面是程序,同时适用于欧拉道路和回路,但是若需要打印的是欧拉道路,在主程序中调用时,参数必须是道路的起点,另外,打印的顺序是逆序的,因此在...原创 2019-11-24 12:43:16 · 111 阅读 · 0 评论 -
判断一个图是否存在有向环(DFS判断)
解决这个问题的算法的思路是对一个节点u进行dfs,判断是否能从u回到自己这个节点,即是否存在从u到u的回路。 我们可以用一个color数组代表每个结点的状态,-1代表还没被访问,0代表正在被访问,1代表访问结束。如果一个状态为“0”(正在被访问)的结点,与他相连的结点状态也为“0”(正在被访问)的话就代表有环。#include <iostream>#include <...原创 2019-11-24 11:33:47 · 727 阅读 · 0 评论 -
Floyd算法简介
文章:https://blog.csdn.net/qq_34374664/article/details/52261597核心代码:#include <iostream>using namespace std;int main(){ int e[10][10],k,i,j,n,m,t1,t2,t3; int inf=99999999; //用inf(in...原创 2019-09-08 11:04:40 · 1740 阅读 · 0 评论 -
前缀和简介及模板
原文章:https://blog.csdn.net/shinian_acmer/article/details/89742912前缀和是一种预处理,可以降低时间复杂度,可以在后面的计算中可以直接应用前面已经算出的结果。一维前缀和模板题:给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。例如,1 3 7 9 -1,查询第2个元素开始长度为3的子...原创 2019-08-30 23:25:27 · 172 阅读 · 0 评论 -
斐波那契博弈简介
原文章: https://blog.csdn.net/dgq8211/article/details/7602807 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下:1)先手不能在第一次把所有的石子取完,至少取1颗;2)之后每次可以取的石子数至少为1,至...原创 2019-08-16 15:25:29 · 180 阅读 · 0 评论 -
记忆化搜索
1.记忆化搜索的思想 记忆化搜索的思想是,在搜索过程中,会有很多重复计算,如果我们能记录一些状态的答案,就可以减少重复搜索量2、记忆化搜索的适用范围 根据记忆化搜索的思想,它是解决重复计算,而不是重复生成,也就是说,这些搜索必须是在搜索扩展路径的过程中分步计算的题目,也就是“搜索答案与路径相关”的题目,而不能是搜索一个路径之后才能进行计算的题目,必须要分步计算,并且搜索过程中...转载 2019-08-06 16:36:30 · 67 阅读 · 0 评论 -
强连通分量---Tarjan算法简介及模板
Tarjan算法,是一个基于Dfs的算法,假设我们要先从0号节点开始Dfs,我们发现一次Dfs我萌就能遍历整个图(树),而且我们发现,在Dfs的过程中,我们深搜到 了其他强连通分量中,那么俺们Dfs之后如何判断他喵的哪个和那些节点属于一个强连通分量呢?我们首先引入两个数组:①dfn【】②low【】第一个数组dfn我们用来标记当前节点在深搜过程中是第几个遍历到的点。第二个数组是整个算法核...原创 2019-07-30 17:51:18 · 144 阅读 · 1 评论 -
KMP算法
KMP算法的应用。记WORD的长度为m,TEXT的长度为n, 暴力法的时间复杂度为O(nm), KMP算法可将复杂度降至O(n+m).KMP算法的总体思想是让遍历TEXT的指针不回溯,从而保证关于n的线性复杂度。为了实现TEXT指针j不回溯这一点,则只能要求WORD指针i回溯。现在问题在于,每次WORD[i]与TEXT[j]匹配失败后,i应该回溯到哪里呢?答案是回溯到k处,k等于字符串WO...原创 2019-08-07 10:42:09 · 103 阅读 · 0 评论 -
尼姆博弈简介与内容
原文章:https://blog.csdn.net/strangedbly/article/details/51137432重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示位异或(xor)运算。Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕...原创 2019-08-18 22:18:34 · 245 阅读 · 0 评论 -
Sprague-Grundy函数简介(SG函数)
原文章:https://blog.csdn.net/strangedbly/article/details/51137432现在我们来研究一个看上去似乎更为一般的游戏:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象模型。也就是说,任何一个ICG...原创 2019-08-18 22:42:15 · 664 阅读 · 0 评论 -
扩展kmp算法
原文章:https://blog.csdn.net/dyx404514/article/details/41831947拓展kmp是对KMP算法的扩展,它解决如下问题:定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0<=i<...原创 2019-08-09 16:48:31 · 338 阅读 · 0 评论 -
判断一个double类型数是否是整数方法
两种方法第一个:const double EPS 1e-6;...double a;...if(a - (double)((int)a) < EPS)//则为整数另一个:#include <math.h>...const double EPS 1e-6double a;...if(a - floor(a) < EPS)//则为...原创 2019-08-19 12:21:52 · 6547 阅读 · 2 评论 -
字符串哈希简述
原文章:https://blog.csdn.net/richard_for_oi/article/details/79306985首先,要想学好Hash,必须要明白一件事:两个元素若全等,其哈希值必定也相等;但哈希值相等,两个元素未必全等(哈希值相等是两个元素全等的必要不充分条件)。看了这句话我想大家都明白,Hash时要尽量使冲突概率趋近于0,即,尽量的满足其充分性。下面介绍一种Hash方法。...原创 2019-08-10 17:02:23 · 139 阅读 · 0 评论 -
lower_bound( )与upper_bound( )用法
原文章:https://blog.csdn.net/qq_40160605/article/details/80150252lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。在从小到大的排序数组中,lower_bound( begin,end,num): 从数组的begin位置到end-1位置二分查找第一个大于或等...原创 2019-08-11 18:35:06 · 135 阅读 · 0 评论 -
计算几何基础
原文章:https://blog.csdn.net/qq_35776579/article/details/54836612矢量的概念 矢量。如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。矢量的加减 设二维矢量P = ( x1, y1 ...原创 2019-08-13 13:09:44 · 280 阅读 · 0 评论