kmp
KMP是一个非常实用的字符串匹配算法 推荐网站: https://www.cnblogs.com/yjiyjige/p/3263858.html https://blog.csdn.net/starstar1992/article/details/54913261/ 视频: KMP字符串匹配算法1—-kmp如何运作 KMP字符串匹配算法2——代码实现 HDU - 1711 Number Sequence12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576/* Judge Status : Accepted Language : C++ Submit Time:2018-08-16 16:11:34 Exe.Time:748MS Exe.Memory:5.4MB*/#include <iostream>#include...
DP
动态规划 入门DP入门参考:漫画:什么是动态规划? 进阶参考:【DP专辑】ACM动态规划总结 http://www.cnblogs.com/raichen/p/5772056.html 动态规划原理 1-最优子结构 用动态规划求解最优化问题的第一步就是刻画最优解的结构,如果一个问题的解结构包含其子问题的最优解,就称此问题具有最优子结构性质。因此,某个问题是否适合应用动态规划算法,它是否具有最优子结构性质是一个很好的线索。使用动态规划算法时,用子问题的最优解来构造原问题的最优解。因此必须考查最优解中用到的所有子问题。 2-重叠子问题 在斐波拉契数列,可以看到大量的重叠子问题,比如说在求fib(6)的时候,fib(2)被调用了5次。如果使用递归算法的时候会反复的求解相同的子问题,不停的调用函数,而不是生成新的子问题。如果递归算法反复求解相同的子问题,就称为具有重叠子问题(overlapping...
对一个整数处理
sprintf,Stringstream 参考:STL之Stringstream字符串流使用总结 sstream<sstream>库定义了三种类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本次主要是讨论stringstream 注意,<sstream>使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。 重复利用stringstream对象如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法; 在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。 常见基本类型互相转换string转int1234567891011121314151617#include...
CodeForces水一水
B. Binary String Constructing(Div3—构造),CodeForces - 1004C(Div2—思维),CodeForces - 962D(Div2—较为精辟的解法),1055B - Alice and Hairdresser(思维),1088A. Ehab and another construction problem(暴力与O(1)), 1088C. Ehab and a 2-operation task(通过操作使数组递增) B. Binary String Constructing(Div3—构造)B. Binary String Constructing 题意:给出a,b,x,构造一个01串,有a个0,b个1。这个01串刚好有x个 S[i] 使得S[i] !=...
LinuxShell
LinuxShell操作小总结 sed,获取当前路径,强制复制,du的用法命令格式sed [选项] ‘命令’ 输入文本 1sed [-nefri] ‘command’ 输入文本 选项与参数 选项 说明 -n 使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来 -e 直接在命令列模式上进行 sed 的动作编辑 -f 直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作 -r sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -i 直接修改读取的文件内容,而不是输出到终端 常用命令 命令 说明 a 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) c 取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行! d 删除,因为是删除啊,所以...
并查集入门
并查集模板 参考:https://www.xuebuyuan.com/3256535.html 总体思路1. 初始化: 把每个点所在集合初始化为其自身。 通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。 2.查找: 查找元素所在的集合,即根节点 3.合并: 两个元素所在的集合合并为一个集合。 通常来说,合并之前,应先判断两个元素是否属于同一集合,这可用上面的“查找”操作实现 状态压缩建立门派的过程是用join函数两个人两个人地连接起来的,谁当谁的手下完全随机。最后的树状结构会变成什么样,我也无法预知,一字长蛇阵也有可能。这样查找的效率就会比较低下。最理想的情况就是所有人的直接上级都是掌门,一共就两级结构,只要找一次就找到掌门了。哪怕不能完全做到,也最好尽量接近。这样就产生了路径压缩算法。 例题题目Input 输入多组数据 每组数据第一行是两个整数n(1<=n<=10^6),m(1<=m<=10^6)。分别表示元素数、操作数(初始时每个元素以自己为一个集合元素编号是1-n) 接下来m行,每行有如下几种输入: ...
数论
欧几里得及其扩展,素数,模运算,快速幂,欧拉函数,快速乘。 欧几里得—最大公约数gcd(a, b) = gcd(b, a mod b)123456int gcd(int a, int b){ if(b == 0) return a; return gcd(b, a % )b;} 一波应用:线段上格点个数—-挑战编程—-欧几里得 algorithm库的std::_gcd函数123456789101112#include <iostream>#include <algorithm>using namespace std;int main(){ int a = 8; int b = 12; cout <<__gcd(a, b); //两个'_' return 0;}//out:4 //g++-4.8 最小公倍数(LCM)和最大公约数(GCD)lcm(a, b) = (a*b)/gcd(a,b) 扩展欧几里得基本算法:对于不完全为 0...
搜索入门
HDU1241 Oil Deposits(DFS模板题),HZAU 1097 Yuchang and Zixiang ‘s maze(BFS模板题),P1683 入门(bfs搜索没有终点),P1162 填涂颜色(BFS联通块),Poj-1321(DFS逐层搜索),HDU-2553(N皇后) HDU1241 Oil Deposits(DFS模板题)题目:HDU1241 大意:和迷宫的输入差不多,‘*’是墙,‘@’是油田,以一个油田为中心,如果它的东南西北一个各个角落,一共八个方向也有油田的话,这些油田就算作一个油田。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include<iostream>#include<cstring>#include<cstdio>char a[102][102];int row,col;int dir[8][2]= //八个方向{ {1,...
luogu题目
P1022 计算器的改良(解简单一元一次方程), P1583 魔法照片(多个信息多个处理系列(题意比较绕)), P1588 丢失的牛(倒逆思想), P1459 三值的排序, P2386 放苹果(递归、dp、dfs都可以做), P2562 [AHOI2002]Kitty猫基因编码,P1106 删数问题 (贪心),P2758 编辑距离(dp),P2404 自然数的拆分问题(回溯) P1022 计算器的改良(解简单一元一次方程)P1022 这道题如果直接读入一个字符串再一个个处理的话可以会想复杂,我之前这样的处理的话代码长还wa(菜鸡),如果采用栈的思想,则会简单很多 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include <iostream>#include <cstdio>#include...
背包问题
部分背包,01背包,完全背包,多重背包 部分背包问题和01背包问题的区别就是:部分背包问题中的单个物品,可以取一部分装入背包。而0/1背包问题则是要么全部拿走,要么一无所有 完全背包与0-1背包问题的区别是:在0-1背包问题中,每个物品仅有一件;在完全背包问题中,每个物品有无限件 多重背包与完全背包问题的区别是:在完全背包问题中,每个物品有无限件;在多重背包问题中,每个物品有Mi件 混合背包问题相当于上面提到所有背包问题的混合:有的物品仅有1件,有的物品有无限件,有的物品有Mi件(有限件) 部分背包【部分背包】问题描述:n件物品,第i件物品价值 vi 元,重wi 磅。希望用 W磅的背包...