![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
算法竞赛入门---sstream+引用+基本结构体定义
定义结构体时:往往使用typedef struct(域定义;)类型名;如typedef struct { double x, y;} point;原创 2019-06-04 00:56:56 · 230 阅读 · 0 评论 -
C++数值类型与string的相互转换
原地址转载 2019-04-05 14:00:31 · 87 阅读 · 0 评论 -
辗转相除法求最大公因数
int gcd(int a, int b) {return b==0 ? a : gcd(b, a%b);}原创 2019-03-27 17:08:23 · 1083 阅读 · 0 评论 -
判断有向图是否有环
利用拓扑排序进行判断,kahn算法:1.计算图中所有点的入度,把入度为0的点加入栈2.如果栈非空:取出栈顶顶点a,输出该顶点值,删除该顶点从图中删除所有以a为起始点的边,如果删除的边的另一个顶点入度为0,则把它入栈3.如果图中还存在顶点,则表示图中存在环;否则输出的顶点就是一个拓扑排序序列例题:leetcode207 课程表class Solution {public: ...转载 2019-04-08 20:35:41 · 9066 阅读 · 0 评论 -
快速排序(求第k小的数)
快排是利用的partition算法,基本思想是从第一个数开始,利用partition算法将这个数在有序序列中的位置找到,这个数的左边部分都是小于它的数,右边部分都是大于他的数,然后通过分治的方法对左右两个区间再进行partition操作,partition算法代码如下:int partition(vector<int> &nums, int begin, int end) ...原创 2019-04-25 14:17:17 · 2999 阅读 · 2 评论 -
图解归并排序
本博客转自添加链接描述基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采...转载 2019-05-14 15:34:53 · 132 阅读 · 0 评论 -
OJ术语: AC、WA、TLE、OLE、MLE、RE、PE、CE
转自:添加链接描述转载 2019-05-14 16:22:42 · 7525 阅读 · 0 评论 -
洛谷P1040 加分二叉树(区间DP例子)
转自:洛谷P1040题解首先,我们要做的就是设计状态,其实就是设计dp数组的含义,它要满足无后效性。关注这个 左子树*右子树+根 我只要知道左子树分数和右子树分数和根的分数(已给出),不就可以了吗?管他子树长什么样!所以,我们fff数组存的就是最大分数,怎么存呢?我们发现:子树是一个或多个节点的集合。那么我们可不可以开一个f[i][j]来表示节点i到节点j成树的最大加分呢?可以先保留这个...转载 2019-05-20 15:43:25 · 229 阅读 · 0 评论 -
c++自定义sort函数的用法
头文件:algorithmstd::sort(first,last,cmp);使用的范围是[first,last)省略 cmp,使用 sort(first,last), 则默认从 小到大排序。使用 sort(first,last, greater<T>() ), 则 从 大到小排序。如果是结构体或者自定义排序规则,则需要自定义cmp 函数。****这一点非常重要:相等...转载 2019-05-10 21:20:35 · 1196 阅读 · 0 评论 -
C语言字符串和字符串数组的输入赋值
文章转自:添加链接描述决心使用C语言来做算法题,开头很痛苦。主要是困在了C字符串的输入和赋值。现总结一下:1、字符串指针一定要开辟空间后在做输入char * str;str=(char*)malloc(100*sizeof(char));scanf("%s",&str);123452、字符串数组要做初始化的开辟空间后再来存储字符串char * strArr[n]...转载 2019-05-11 13:41:35 · 7116 阅读 · 1 评论 -
洛谷P1032 字串变换题解
BFS,设置一个结构体,将当前已被替换的字符串和步数放入队列,特别要注意当前串可能不只有一个子串,所以要用while循环扫完所有,注意while语句里的break一定要加上。#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<string...原创 2019-05-21 20:21:12 · 193 阅读 · 0 评论 -
c++STL之双端队列
本文章转自添加链接描述deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除。不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势。头文件#include创建deque对象1)deque();//创建一个没有任何元素的deque对象。deque d2)deque(size_typen);//创建一个具有n个元素的dequ...转载 2019-05-12 21:28:12 · 2167 阅读 · 0 评论 -
洛谷P1141 迷宫题解(典型的BFS)
题目描述有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。输入输出格式输入格式:第1行为两个正整数n,m。下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。接下来m行,每行2个用空格分隔...原创 2019-05-23 22:31:36 · 884 阅读 · 0 评论 -
洛谷P1182 数列分段`Section II`(二分查找)
题目连接:洛谷P1182 题意就是说将一个长度为N的连续序列换分为M个连续的子序列。使得每个序列之和的最大值最小。解法:看了很多篇题解,解法就是利用二分法,这道题要注意上下界,下界应该是所有数的最大值(即所有区间只有一个元素的时候),上界应该是所有数之和(即整个序列为一个区间)。最开始把下界理解为所有数的最小值,然后WA了一个点。这种类型的模板题可以这么来看:因为目的是要让所有区间的最大值...原创 2019-06-05 15:16:12 · 263 阅读 · 0 评论 -
二分查找及变种的二分查找
转自:你真的会写二分查找吗普通二分查找:/** * 二分查找,找到该值在数组中的下标,否则为-1 */static int binarySerach(int[] array, int key) { int left = 0; int right = array.length - 1; // 这里必须是 <= while (left <= ri...转载 2019-06-05 15:26:24 · 460 阅读 · 0 评论 -
P1908逆序对(归并排序模板题)
题目描述猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。输入格式:第一行,一个数n,表示序列中有...原创 2019-06-04 00:52:53 · 589 阅读 · 0 评论 -
旋转矩阵
牛客网北航-旋转矩阵题目描述任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。 要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。输入描述:输入有多组数据。每组数据第一行输入n(1<=n<=9),从第二行开始输入两个n阶矩...转载 2019-03-29 14:31:41 · 204 阅读 · 0 评论 -
PAT团体天梯赛L1-050. 倒数第N个字符串
将这道题理解为一个十进制数转化为26进制的数就很好做了#include<iostream>#include<math.h>using namespace std;int main(){ int m,n; cin>>m>>n; int loc=pow(26,m)-n; //对应的十进制数 for(int i=m-1;i>=0;i...原创 2019-03-12 17:00:01 · 78 阅读 · 0 评论 -
最小生成树---Kruskal算法+并查集(和prime算法模板)
CCF 201412-4 最优灌溉#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;using namespace std;#define maxn 1005struct node{ int x,y,z;}n1;int p[maxn];int n,m;vector&原创 2018-12-12 12:55:54 · 211 阅读 · 0 评论 -
算法竞赛入门经典——map的使用
详情见这篇博客:C++ STL Map的创建、删除、插入、更新、遍历注:map.count()也可以用来查找对应的键值是否存在,若存在,则返回1,若不存在,则返回0.map遍历的两种方式:一、如:map < int, CString > 或者 map < int, 结构体名>的元素遍历map < int, CString > maps; 或...转载 2019-06-04 00:56:30 · 288 阅读 · 0 评论 -
算法竞赛入门经典——set的使用
set:唯一性,有序性,遍历时也要借助迭代器iterator常用操作:begin() 返回set容器的第一个元素的地址end() 返回set容器的最后一个元素地址clear() 删除set容器中的所有的元素empty() 判断set容器是否为空max_size() 返回set容器可能包含的元素最大个数size() 返回当前set容器中的元素...转载 2019-06-04 00:56:23 · 196 阅读 · 0 评论 -
算法竞赛入门经典——vector的使用
【C++】判断元素是否在vector中,对vector去重,两个vector求交集、并集增:push_back:在容器末端加入删:pop_back:在容器末端删除erase():可以删除由一个iterator指出的元素,也可以删除一个指定范围的元素。可以结合vector::iteratoriterator=find(v.begin(),v.end(),num_to_find)进行删除。(fi...转载 2019-06-04 00:56:16 · 231 阅读 · 0 评论 -
算法竞赛入门经典———lower_bound()和upper_bound()
STL是指C++的标准模板库关于二分查找的lower_bound()和upper_bound()转载 2019-06-04 00:56:06 · 195 阅读 · 0 评论 -
算法竞赛入门——string的比较大小
c++字符串比较大小的两种方法转载 2019-06-04 00:55:53 · 102 阅读 · 0 评论 -
算法竞赛入门——sort函数的用法
添加链接描述转载 2019-06-04 00:55:36 · 152 阅读 · 0 评论 -
算法竞赛入门经典学习笔记
当输入的数量不定时: int x; while (scanf(&amp;quot;%d&amp;quot;, &amp;amp;amp;x) == 1) { }输入输出重定向: freopen(&amp;quot;input.txt&amp;quot;, &amp;quot;r&amp;quot;, stdin); freopen(&amp;quot原创 2019-06-04 00:57:20 · 114 阅读 · 0 评论 -
算法经典入门竞赛 习题3.3 分子量
#include<stdio.h>#include<string.h>#include<ctype.h>#define maxn 100char s[maxn];#define LOCALfloat returnm(char c) //返回相对原子质量{ if (c == 'C') return 12.01; else if (c ==...原创 2018-09-29 10:49:10 · 222 阅读 · 0 评论 -
算法竞赛入门学习 习题3-3
#include<stdio.h>#include<string.h>#include<ctype.h>#include <stdlib.h>#define maxn 10int count[maxn];//#define LOCALint main() {#ifdef LOCAL freopen("input.txt", ...原创 2018-09-29 11:20:36 · 132 阅读 · 0 评论 -
关于getline
getline()是不会忽略换行符的 ,如果之前的缓冲区有换行,要用getchar()把换行符吃掉,再使用getline()一行一行的读取、例如: int n,m; cin>>n>>m; getchar(); string s[105]; for(int i=0;i<n;i++){ getline(cin,s[i]); }...原创 2019-04-08 20:36:50 · 495 阅读 · 0 评论 -
string.find()函数
find()find(‘a’),从字符串的0号下标开始查找(包括0)。find(‘a’,k),从字符串的k号下标开始查找(包括k)。其中参数也可以为"a",即既可以查找字符,也可以查找字符串返回类型:size_t,即一个无符号整数(按打印出来的算)。若查找成功,返回按查找规则找到的第一个字符或子串的位置;若查找失败,返回npos,即-1(打印出来为4294967295)。通过判断返回的po...转载 2018-12-06 12:39:40 · 1242 阅读 · 0 评论 -
字符串处理的常用函数:replace()、insert()
1.replace注意:replace()会把原来字符串改变,也会返回一个改变后的字符串使用replace(begin(),end(),“sd”)时,表示将整个字符串替换,s.begin()表示字符串的第一位,s.end()表示字符串的最后一位的下一位?replace(begin(),end()-1,“sd”)表示将整个字符串除最后一位用"sd"替换replace(begin(),begi...转载 2018-12-06 13:32:00 · 1524 阅读 · 0 评论 -
c++优先队列
一、相关定义优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“&lt;”操作符来重新定义比较规则。头文件为#include 二、基本操作empty() ...转载 2018-12-15 22:05:10 · 796 阅读 · 0 评论 -
KMP算法模板
/* CCF201409-3 字符串匹配 */ #include <iostream>#include <cstring> using namespace std; // KMP算法:函数getnext()和kmp()void getnext(int next[], char t[]){ int i=0, j=-1; next[0] = -...转载 2018-12-15 23:34:38 · 105 阅读 · 0 评论 -
C语言strlwr()、strupr()与strstr()、strchr()函数
strlwr()头文件:#include &lt;string.h&gt;strlwr()用于将字符串中的字符转换为小写,其原型为:char *strlwr(char *str);注意:strlwr()和strupr()不是标准库函数,只能在windows下(VC、MinGW等)使用,Linux GCC中需要自己定义。示例:#include&lt;stdio.h&gt;#include...转载 2018-12-16 00:08:49 · 17672 阅读 · 0 评论 -
手写堆排序
若从小到大排序,把原有数组维护成一个大顶堆即可,注意从非叶子结点中的最后一个结点倒序遍历。若二叉树结点下标从0开始,某个节点下标为k,则它的左右子节点的下标分别为2k+1,2k+2。 获得某个节点的父节点下标的方法为(idx+1)/2-1若二叉树结点下标从1开始,某个节点下标为k,则它的左右子节点的下标分别为2k,2k+1,获得某个节点的父节点下标的方法为idx/2。代码如下:#incl...原创 2019-08-16 23:34:26 · 521 阅读 · 0 评论