【模板】
文章平均质量分 80
张松超
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU ~ 3068 ~ 最长回文 (Manacher模板题)
思路:Manacher算法。 用string输入输出会超时。算法讲解大家可以看这篇博客:Manacher算法--O(n)回文子串算法#include<bits/stdc++.h>using namespace std;const int MAXN = 110005 * 2;//int Manacher(string a)int Manacher(char a[]){ ...原创 2018-03-17 21:15:09 · 430 阅读 · 0 评论 -
图的存储结构
图为G(V,E)。 V代表点集,E代表边集。n为点的个数,m为边的个数。下面代码基于这个图:五个点七条边。输入边的顺序为:起点,终点,边权1 2 12 3 23 4 31 3 44 1 51 5 64 5 7图片和数据来自:深度理解链式前向星邻接矩阵:对于邻接矩阵来说,初始化所有边权为极大值INF,需要的时间,建图需要O(m),所以总的时间复杂度是。空间上,邻接矩阵的开销也是,与点的个数有关。优点...原创 2018-01-15 10:17:12 · 1116 阅读 · 0 评论 -
POJ ~ 1751 ~ Highways (最小生成树 + 打印路径)
题意:N个点,给你N个点的坐标,现在还有Q条边已经连接好了。问把N个点怎么连接起来的花费的距离最短?坑点:注意多组输入输出可能会超时。本题为:Special judgeYes,只要是符合要求的正确答案即可。思路:prim或者kruskal的路径输出。①prim,已经建好的边的权值设置为0。开一个pre数组//pre[i]记录距离i最近的点。那么建立的边也就为pre[i]和i,但是i节点...原创 2018-01-25 11:19:29 · 812 阅读 · 0 评论 -
LCS,LIS,LPS
const int MAXN = 1e3 + 5;int dp[MAXN][MAXN];//HDU ~ 1159 ~ Common Subsequence//最长公共子序列int LCS(string a, string b){ memset(dp, 0, sizeof(dp)); int lena = a.size(), lenb = b.size(); for...原创 2018-03-29 14:25:27 · 611 阅读 · 0 评论 -
HDU ~ 2138 ~ How many prime numbers (Miller_Rabin)
题意:给你N个数,判断这N个数字中有多少个素数?思路:Miller_Rabin素数判定法。因为数字值比较大所以普通判断可能会超时,所以要用到这个。#include<bits/stdc++.h>using namespace std;long long qpow(long long a, long long n, long long mod){ long long ans ...原创 2018-04-12 12:23:28 · 300 阅读 · 0 评论 -
大数模板
参考刘汝佳算法竞赛入门经典一书,还有C++实现BigInteger这篇博客。黄线中内容来自上面那篇博客。------------------------------------------------------------------------------------------------------------------- 已重载的运算符 运算符类型 运算符...原创 2017-05-23 19:44:42 · 1240 阅读 · 0 评论 -
POJ ~ 3159 ~ Candies (Dijkstra + 优先队列 + 链式前向星 or 栈式SPFA)(差分约束)
推荐一片入门博客:夜深人静写算法(四) - 差分约束个人感觉很有用的地方,暂存一下,备查: 4、最大值 => 最小值 然后,我们将问题进行一个简单的转化,将原先的"<="变成">=",转化后的不等式如下:B - A >= c (1)C - B >= a (2)C - A >= b (3) 然后求C - A的最小...原创 2018-01-31 10:17:05 · 416 阅读 · 0 评论 -
HDU ~ 1848 ~ Fibonacci again and again (SG函数模板题)
思路:先算出1000以为内的Fibonacci数,其实也就是前15个。然后求SG值,异或起来就是答案。//#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;co...原创 2018-04-13 17:05:55 · 214 阅读 · 0 评论 -
UVA ~ 11992 ~ Fast Matrix Operations (线段树 + 区间更新)
题意:有一个r行c列的全0矩阵,支持以下3种操作,如表3-3所示。□1. x1 y1 x2 y2 v 子矩阵x1 y1 x2 y2的所有元素增加v(v>0)□2 x1 y1 x2 y2 v 子矩阵x1 y1 x2 y2的所有元素设为v(v>0)□3 x1 y1 x2 y2 查询子矩阵x1 y1 x2 y2的元素和、最小值和最大值。子矩...原创 2018-05-08 17:57:10 · 291 阅读 · 0 评论 -
UVA ~ 10129 ~ Play on Words (欧拉路)
题意:输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母和上一个单词的第一个字母相同(例如acm,malform,mouse)。每个单词最多包含1000个小写字母。输入中可以有重复的单词。【分析】把字母看作结点,单词看成有向边,则问题有解,当且仅当图中有欧拉路径。前面讲过,有向图存在欧拉道路的条件有两个:底图(忽略边方向后得到的...原创 2018-05-15 11:45:03 · 301 阅读 · 0 评论 -
POJ ~ 3070 ~ Fibonacci (矩阵快速幂模板)
题意:求斐波那契的第N项,f[0] = 0,f[1] = 1。对10000取余。思路:模板题,模板题,模板题。//#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int...原创 2018-04-15 19:43:15 · 337 阅读 · 0 评论 -
康拓展开 讲解+模板
问题:给你一些不重复的元素,将它们从小到大排序,问你某个排列在所有的排列处于第几大;康拓展开:公式为:X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!(an是n这个数字在所有元素中排第几从0开始算,也就是有几个比n小的数字)讲解:举个例子现在有4个元素为1,2,3,4,将他们从小到大排序结果如下:①1 2 3 4 ⑦2 1 3 4 ...原创 2017-07-06 09:58:21 · 727 阅读 · 0 评论 -
POJ ~ 3259 ~ Wormholes (BellmanFord和SPFA(BFS,DFS)模板)
题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路双向路,虫洞有这样的性质: 时间倒流。问你这个农民能不能看到他自己,也就是说,有没有这样一条路径,能利用虫洞的时间倒流的性质,让这个人能在这个点出发前回去,这样他就是能看到他自己。输入n个点m条田地之间的路,w个虫洞。思路:有负环输出YES,没负环输出NO。交POJ会CE,换一下万能头就好了。...原创 2018-01-28 23:57:56 · 470 阅读 · 0 评论 -
HDU ~ 2544 ~ 最短路 (Dijkstra模板,常规版 and 优先队列优化版)
Dijkstra:复杂度:,优先队列优化。优点:稳定。缺点:不能有负权。优先队列: #include<bits/stdc++.h>using namespace std;const int MAXN = 105;const int INF = 0x3f3f3f3f;struct Edge{ int from, to, dist; ...原创 2018-01-28 12:51:52 · 470 阅读 · 0 评论 -
POJ ~ 1273 ~ Drainage Ditches(Dinic和EK模板)
题意:给定 n个点,m条边。下面m行,每行三个数字s,e,c表示s到e的容量为c/秒。问从1-n的每秒钟的最大流量为多少?思路:刘汝佳大神的模板。交POJ的话会CE,大家把万能头换掉就好了。Dinic:#include<bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5;const int IN...原创 2018-01-27 13:18:37 · 453 阅读 · 0 评论 -
素数
数可以分为两类,素数,合数;合数又可以分解为素数;所以掌握一些有关素数的知识很有必要;(素数定义:只能被1和自己整除的数成为素数;)1.①线性筛素数(Eratosthenes筛法)伪代码如下:const int maxn=100005;bool v[maxn];void found_prime()//筛法素数打表 { int m=sqrt(maxn+0.5); memse原创 2017-04-07 16:52:45 · 1273 阅读 · 0 评论 -
最大公约数与最小公倍数(gcd,lcm)
先来说求最小公约数的方法1.欧几里得算法(辗转相除法)int gcd(int a,int b) { return b==0?a:gcd(b,a%b);}设两数为a、b(a>b),用gcd(a,b)表示a,b的最大公约数,r=a (mod b) 为a除以b的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。第一原创 2017-07-19 16:52:56 · 3696 阅读 · 0 评论 -
两个日期之间的天数
由于会有好多题中涉及到两个日期之间天数的计算,所以找到一个好用模板;输入开始的年,月,日到结束的年,月,日;#include using namespace std;int day(int year,int month,int day)//到0年3月1日的天数{ int m=(month+9)%12,y=year-m/10; return 365*y+y/4-y/100+y/400+原创 2017-04-26 15:23:36 · 1065 阅读 · 0 评论 -
最小费用最大流模板
刘汝佳的MCMF模板:队列优化的BellmanFord(SPFA)版: #include<bits/stdc++.h>using namespace std;const int MAXN = 1e5 + 5;const int INF = 0x3f3f3f3f;struct Edge{ int from, to, cap, flow, cost; ...原创 2018-01-27 19:04:26 · 1042 阅读 · 0 评论 -
HDU ~ 1007 ~ Quoit Design(分治法)(最近点对)
#include<bits/stdc++.h>using namespace std;const double INF = 0x3f3f3f3f;struct Point{ double x,y;}point[100005];int p[100005];bool cmpx(struct Point a,struct Point b){ return a.x < b...原创 2017-10-26 10:28:49 · 509 阅读 · 0 评论 -
HIT ~ 1402~整数划分问题(动态规划 or 母函数)
概念编辑所谓整数划分,是指把一个正整数n写成为其中, 为正整数,并且 ; 为n的一个划分。如果 中的最大值不超过m,即 ,则称它属于n的一个m划分。[1] 求划分个数编辑分析这里我们记n的m划分的个数为 。例如,当n=4时,有5个划分,即 , , , , 。注意: 和 被认为是同一个划分。根据n和m的关系,考虑一下几种情况:(一)当 时,无论m的值为多少 ,只有一种划...原创 2017-07-27 10:47:13 · 1215 阅读 · 0 评论 -
表达式求值(模板)
思路:我们这里讲一种方法,叫做"算符优先法"。 首先我们要明白表达式是怎么算的:比如“1+2*(2+3)/5"。我们应该明白算术四则运算的规则。即:①先乘除后加减②顺序从左到右③先括号内在括号外"算符优先法"就是根据这个运算优先关系的规定。任何一个表达式都是由操作数(operand),运算符(operator)和界限符(delimiter)组成的。一般来说,操作符既可以是常数,也可以是被说明为变量...原创 2017-05-22 18:54:44 · 1121 阅读 · 0 评论 -
(Floyd模板,最短路+传递闭包)
Floyd:复杂度:优点:可以处理负权,可以传递闭包缺点:复杂度太高。void Floyd(int n){ for (int k = 0; k < n; k++) { for (int k = 0; k < n; k++) { for (int k = 0; k < n; k++) { d[i][j] = min(d[i][j], d[i][k]原创 2018-01-28 13:29:20 · 566 阅读 · 0 评论
分享