- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 RMQ
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大值。一般我们用ST算法解决这样的问题。ST(Sparse Table)算法可以在O(nlogn)时间内进行预处理,然后在O(1)时间内回答每个查询。一.预处理设A[i]是要求区间最值的数列,F[...
2019-02-24 17:17:04
340
原创 最短路
前置技能点:链式前向星简介:更为经济、简练的存图结构。 是前向星的改进(普通前向星和模拟链表还有一定的区别。普通前向星的建图过程涉及到排序操作,开销较大) 链式前向星巧妙地利用 结构体数组模拟了一个链表,并通过头插法进行边的插入操作。 除了 Dijkstra 和 SPFA,在差分约束系统、网络流、二分图匹配等其他经典的图论问题中也常常能看见链式前向星的身影。适用情况:(链...
2019-02-18 15:38:44
322
原创 16.中位数
题目链接题目描述给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数。即前1,3,5,……个数的中位数。输入输出格式输入格式:输入文件median.in的第1行为一个正整数N,表示了序列长度。第2行包含N个非负整数A[i] (A[i] ≤ 10^9)。输出格式:输出文件med...
2019-02-17 19:13:19
411
原创 vector
一.解释:vector(向量):是一种顺序容器,事实上和数组差不多,但它比数组更优越。一般来说数组不能动态拓展,因此在程序运行的时候不是浪费内存,就是造成越界。而vector正好弥补了这个缺陷,它的特征是相当于可分配拓展的数组,它的随机访问快,在中间插入和删除慢,但在末端插入和删除快。二.用法:#include <vector> a) vector<int...
2019-02-17 17:28:22
125
原创 15.食物链
题目链接Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物...
2019-02-17 16:58:52
240
原创 优先队列
优先队列,是一种可以自动排序的队列。声明公式形如:priority_queue< 结构名, vector<结构名> , greater/less<结构名> > 队列名;可以简写为priority_queue<结构名>,不过这样只能从大到小了。默认的优先队列(非结构体结构)priority_queue <int> q;代...
2019-02-15 19:00:42
188
原创 并查集
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运...
2019-02-15 15:00:27
118
原创 14.导弹拦截
题目链接题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是≤50000的正整数),计算这套系统最多能拦截多少导弹,如果...
2019-02-13 16:30:56
220
原创 13.金明的预算方案
题目链接题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图...
2019-02-12 21:16:12
216
原创 线性dp
目录LIS 最长上升子序列LDS 最长下降子序列LCS 最长公共子序列一.LIS 最长上升子序列思路:每访问输入的一个数a[i],求往前面找比起小的一个数a[j],则h[i]=h[j]+1.状态转移方程:h[i]=max{h[j]+1},j<i代码:int LIS(int n){ int res = 0; for(int i = 0; i &...
2019-02-12 20:44:35
192
转载 读入与输出的优化
1. 读入优化 C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢? 其实,经过类似高精度的处理,就可以实现类型转换啦! 模板:#include<cctype>inline int read(){ int X=0,w=0; char ch=0; while(!isdigit(ch)) { ...
2019-02-12 15:18:44
204
转载 区间dp
模板:int dp[1010][1010];int main(){for(int i=0;i<n;i++) dp[i][i]=........ for(int len=1;len<=n;len++)//区间长度 { for(int i=0;i<n;i++)//区间起点 { j=len-1+i;...
2019-02-11 21:10:50
235
原创 n的阶乘用m进制表示末尾零的个数
拿了一个cf大佬的代码,看不太懂,先码住代码: #include<iostream>#include<cctype>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<ctime>#include&
2019-02-11 17:20:40
1135
原创 n的阶乘末尾零的个数
末尾0的个数就是指这个数总共有几个10因子,而10又能表示成2和5的乘积。假设m=n!,那么m中2的因子个数肯定大于5的因子个数,所以m中5的因子个数即是所要求结果,显然n除以5可得到1~n中包含有一个因子5的个数,但是,1~n中有的数可以被5整除好几次,所以必须将这个数再除以5,得到1~n中包含有两个因子5的个数,依次循环进行累加即可得到全部5的因子个数代码:#include<b...
2019-02-11 16:54:42
780
原创 快速幂
快速幂的目的就是做到快速求幂,假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b)也即是O(n)级别,快速幂能做到O(logn),快了好多好多。它的原理如下:假设我们要求a^b,那么其实b是可以拆成二进制的,该二进制数第i位的权为2^(i-1),例如当b==11时, a11=a(2^0+2^1+2^3),11的二进制是1011,11 = 2³×1 + 2²×0 + 2...
2019-02-08 18:32:04
158
原创 lower_bound
lower_bound()函数需要加载头文件#include<algorithm>,其基本用途是查找有序区间(前闭后开)中第一个大于或等于某给定值的元素的位置,其中排序规则可以通过二元关系来表示。函数原型: template<class ForwardIterator, class Type> ForwardIterator lower_bound( ...
2019-02-06 20:38:17
415
原创 11.数字组合
题目链接题目:有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如: n=5,5个数分别为1,2,3,4,5,t=5; 那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。 输入 输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000) 接下来的一行是n个正整数,用空格隔开...
2019-02-03 19:37:43
474
1
原创 10.最长公共子序列
如果s[n-1]=t[m-1],sn与tm的最长公共子序列问题就转换成了求sn-1与tm-1的最长公共子序列如果s[n-1]!=t[m-1],sn与tm的最长公共子序列问题就转换成了求sn与tm-1,sn-1与tm的最长公共子序列状态转移方程:如果s[i]=t[j],dp[i][j]=dp[i-1][j-1]+1如果s[i]!=t[j],dp[i][j]=max(dp[i][j...
2019-02-02 15:23:17
223
原创 9.背包问题
01背包:每个物品有一定价值和容量,要么取要么不取,只能取一次完全背包:在01背包基础上,每个物品可以取无数次多重背包:每种物品有一个固定取数的上限二维背包:对于每件物品,具有两种不同的费用,存在两种不同的限制。一般形式是对物品总数的限制。 01背包问题,是用来介绍动态规划算法最经典的例子我先先用最简单也是最容易想到的方法解决,针对每个物品是否能放入背包进行搜索代码...
2019-02-02 00:53:13
238
原创 素数筛选法
素数的求解在很多题目当中都会用到,最常见的就是直接暴力判断bool isprime(int number){ if(number==1) return 0; if(number==2) return 1; for(int i=2;i*i<=number;i++) { if(number%i==0) return 0; } ...
2019-02-01 12:09:43
465
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人