
ACM模板-f_zyj
私人订制的ACM模板~~~希望对大家有所帮助。
f_zyj
一个追逐蝴蝶的人!
展开
-
ACM在线模版-f-zyj
试图打造最为完善最为工整的ACM竞赛模版!!!By-f-zyj在线速查!赛前整理打印,为比赛做足准备-_-#原创 2016-06-06 13:26:50 · 116298 阅读 · 62 评论 -
关于爆栈问题——手动加栈
今天忽然遇见了一行很牛逼的代码:#pragma comment(linker, “/STACK:1024000000,1024000000”) 据说是手动加栈的,作为小白的我自然是只好各种查资料。然后牵扯到了很多基础概念,C、C++、GCC、G++、把我搞得晕头转向,都分不清谁是谁了。 经查阅资料: G++和C++都是C++语言的编译器,二者基本相同。 而GCC和C都是C语言编译器,而这差别原创 2016-05-21 03:23:28 · 10748 阅读 · 10 评论 -
strtok和sscanf结合输入
一种加速输入外挂……空格作为分隔输入,读取一行的整数:gets(buf);int v;char *p = strtok(but, " "); while(p){ sscanf(p, "%d", &v); p = strtok(NULL," "); }当然,还有别的输入外挂。原创 2016-05-21 03:29:03 · 1389 阅读 · 0 评论 -
输入输出外挂总结
明明在C语言中有scanf()、printf(),C++中有cin、cout,为什么我们还要用输入输出外挂呢?这个问题很明显,一定是因为这些输入输出函数功能过于强大而导致效率低,(很多时候,功能越强大的东西越臃肿),而我们使用的输入输出外挂既然叫外挂,那说明其一定有很大的优势,而这方面优势就体现在术有专攻上。原来的输入输出函数因为要应对不同类型的输入输出,所以内部一定做了很多的判断,而我们在遇见实原创 2016-05-22 05:06:28 · 15474 阅读 · 8 评论 -
滚动数组
蓝桥杯国赛快来了,赶快找来往届赛题瞅瞅先,看到最后一题,发现需要用到动态规划,但是感觉数据比较大,单纯的用动态规划怕是要超内存,怎么办呢?这时发现了一个新名词,最起码对我而言的新名词——滚动数组,顿时懵了,啥叫滚动数组?怎么个滚动发儿?于是开始搜索资料,找到一个不错的解释。当然,最好的解释一定是代码了>>>#include <stdio.h>int main(){ int i;原创 2016-05-23 01:14:52 · 3111 阅读 · 2 评论 -
最短路
Dijkstra 单源最短路,邻接矩阵形式/* * 单源最短路径,Dijkstra算法,邻接矩阵形式,复杂度为O(n^2) * 求出源beg到所有点的最短路径,传入图的顶点数和邻接矩阵cost[][] * 返回各点的最短路径lowcost[],路径pre[],pre[i]记录beg到i路径上的父节点,pre[beg] = -1 * 可更改路径权类型,但是权值必须为非负 */const in原创 2016-06-06 15:48:11 · 4651 阅读 · 13 评论 -
第K短路
Dijkstra/* * Dijkstra变形,可以证明每个点经过的次数为小于等于K, * 所有Dijkstra的数组dist由一维变为二维,记录经过该点 * 1次、2次......k次的最小值 * 输出dist[n - 1][k]即可 */int g[1010][1010];int n, m, x;const int INF = 0x3f3f3f3f;int vis[1010];原创 2016-06-07 23:44:33 · 2628 阅读 · 1 评论 -
最小生成树(森林)
Prim算法/* * Prim求MST * 耗费矩阵cost[][],标号从0开始,0 ~ n-1 * 返回最小生成树的权值,返回-1表示原图不连通 */const int INF = 0x3f3f3f3f;const int MAXN = 110;bool vis[MAXN];int lowc[MAXN];int Prim(int cost[][MAXN], int n) //0原创 2016-06-08 16:42:34 · 4456 阅读 · 0 评论 -
次小生成树
O(V^2)结论次小生成树可由最小生成树转换一条边得到证明T是某一棵最小生成树,T0是任一棵异于T的树,通过变换T0->T1->T2->…->Tn(T)变成最小生成树,所谓的变换是,每次把T_i中的某条边换成T中的一条边,而且树T_(i + 1)的权小于等于T_i的权。 具体操作是: step1. 在T_i中任取一条不在T中的边u_V; step2. 把边u_v去掉,就剩下两个连通分量A和B,原创 2016-06-08 17:33:09 · 1973 阅读 · 0 评论 -
欧拉路径
ACM模版欧拉回路每条边只经过一次,而且回到起点判断无向图:连通(不考虑度为0的点),每个顶点度数都为偶数。有向图:基图连通(把边当成无向边,同样不考虑度为0的点),每个顶点出度等于入度。混合图:既有无向边也有有向边,首先是基图连通(不考虑度为0的点),然后需要借助网络流判定。 首先给原图中的每条无向边随便指定一个方向(称为初始定向),将原图改为有向图G’,然后的任务就是改变G’中某些条边的原创 2016-06-11 02:49:24 · 3317 阅读 · 0 评论 -
DAG的深度优先搜索标记
ACM模版DAG && DFS/* * DAG(有向无环图)的深度优先搜索标记 * INIT:edge[][]邻接矩阵;pre[], post[], tag全置0 * CALL:dfsTag(i, n); pre/post:开始/结束时间 */const int V = 1010;int edge[V][V];int pre[V];int post[V];int tag;void原创 2016-06-13 02:16:41 · 1783 阅读 · 0 评论 -
图的割点、桥和双连通分支的基本概念
ACM模版[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶 点数。 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。[双连通图、割点与桥]原创 2016-06-13 23:31:12 · 3835 阅读 · 1 评论 -
无向图找桥
ACM模版无向图找桥/* * 无向图找桥 * INIT: edge[][]邻接矩阵;vis[],pre[],ans[],bridge置0; * CALL: dfs(0, -1, 1, n); */const int V = 1010;int bridge; //桥int edge[V][V];int ans[V];int pre[V];int vis[V];void dfs(int原创 2016-06-14 00:09:51 · 3556 阅读 · 0 评论 -
无向图连通度(割)
ACM模版无向图连通度(割)/* * INIT: edge[][]邻接矩阵;vis[],pre[],anc[],deg[]置为0; * CALL: dfs(0, -1, 1, n); * k = deg[0], deg[i] + 1(i = 1...n - 1)为删除该节点后得到的连通图个数 * 注意: 0作为根比较特殊 */const int V = 1010;int edge[V][原创 2016-06-14 23:03:40 · 2504 阅读 · 1 评论 -
字符串 HASH
ACM模版字符串 HASH/* * 字符串 Hash * 注意:mod选择足够大的质数(至少大于字符串个数) */unsigned int hashA(char *url, int mod){ unsigned int n = 0; char *b = (char *)&n; for (int i = 0; url[i]; i++) { b[i原创 2016-06-15 18:03:09 · 2093 阅读 · 0 评论 -
KMP算法
ACM模版KMP_Pre/* * next[]的含义,x[i - next[i]...i - 1] = x[0...next[i] - 1] * next[i]为满足x[i - z...i - 1] = x[0...z - 1]的最大z值(就是x的自身匹配) */void KMP_Pre(char x[], int m, int next[]){ int i, j; j =原创 2016-06-16 20:55:21 · 3221 阅读 · 3 评论 -
扩展KMP
ACM模版扩展KMP/* * 扩展KMP * next[i]:x[i...m-1]的最长公共前缀 * extend[i]:y[i...n-1]与x[0...m-1]的最长公共前缀 */void preEKMP(char x[], int m, int next[]){ next[0] = m; int j = 0; while (j + 1 < m && x[j]原创 2016-06-19 22:14:55 · 1887 阅读 · 0 评论 -
Manacher最长回文子串
ACM模版Manacher算法最长回文子串实例/* * 求最长回文子串 */const int MAXN = 110010;char A[MAXN * 2];int B[MAXN * 2];void Manacher(char s[], int len){ int l = 0; A[l++] = '$'; //0下标存储为其他字符 A[l++] = '#';原创 2016-06-20 16:58:24 · 1613 阅读 · 1 评论 -
Karp-Rabin算法
ACM模版字符串匹配/* * hash(w[0 ... m - 1]) = * (w[0] * 2 ^ (m - 1) + ... + w[m - 1] * 2 ^ 0) % q; * hash(w[j + 1 ... j + m]) = * rehash(y[j], y[j + m], hash(w[j ... j + m - 1]); * rehash(a, b, h) =原创 2016-06-22 00:02:07 · 2972 阅读 · 1 评论 -
strstr函数
ACM模版strstr/* * strstr函数 * 功能:在串中查找指定字符串的第一次出现 * 用法:char *strstr(char *strOne, char *strTwo); * 据说strstr函数和KMP的算法效率差不多 */int main(int argc, const char * argv[]){ char strOne[] = "Borland原创 2016-06-22 05:47:00 · 2940 阅读 · 0 评论 -
头文件
ACM模版ACM/ICPC竞赛头文件(C/C++) #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstdlib> #include <stack> #include <vector> #include <list> #include原创 2016-06-23 17:33:28 · 1151 阅读 · 0 评论 -
ACM/ICPC竞赛之STL简介
ACM模版STL简介关于STLSTL(Standard Template Library,标准模版库)是C++语言标准中的重要组成部分。STL以模板类和模版函数的形式为程序员提供了各种数据结构和算法的实现,程序员吐过能够充分的利用STL,可以在代码空间、执行时间和编码效率上获得极大的好处。STL大致可以分为三大类:算法(algorithm)、容器(container)、迭代器(iterator)。S原创 2016-06-23 19:52:25 · 18216 阅读 · 2 评论 -
ACM/ICPC竞赛STL--pair
ACM模版 STL的<utility>头文件中描述了一个看上去非常简单的模版类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较运算符模版函数。 Example,想要定义一个对象表示一个平面坐标点,则可以:pair<double, double> p;cin >> p.first >> p.second;pair模版类需要两个参数:首元素的数据类型和尾元素的数据类型。原创 2016-06-23 21:04:03 · 4132 阅读 · 6 评论 -
ACM/ICPC竞赛之STL--vector
vector在STL的<vector>头文件中定义了vector(向量容器模版类),vector容器以连续数组的方式存储元素序列,可以将vector看作是以顺序结构实现的线性表。当我们在程序中需要使用动态数组时,vector将会是理想的选择,vector可以在使用过程中动态地增长存储空间。 vector模版类需要两个模版参数,第一个参数是存储元素的数据类型,第二个参数是存储分配器的类型,其中第二个原创 2016-06-23 22:31:41 · 4025 阅读 · 1 评论 -
ACM/ICPC竞赛之STL--iterator简介
ACM模版iterator简介iterator(迭代器)是用于访问容器中元素的指示器,从这个意义上说,iterator(迭代器)相当于数据结构中所说的“遍历指针”,也可以把iterator(迭代器)看作是一种泛化的指针。STL中关于iterator(迭代器)的实现和使用时相当复杂的,这里我们暂时不去详细讨论关于iterator(迭代器)的实现和使用,而只对iterator(迭代器)做一点简单的介绍。原创 2016-06-24 18:25:00 · 1934 阅读 · 4 评论 -
ACM/ICPC竞赛之STL--string
ACM模版string字符串是程序中经常要表达和处理的数据,我们通常是采用字符数组或字符指针表示字符串。STL为我们提供了另一种使用起来更为便捷的字符串的表达方式:string。string类的定义在头文件<string>中。string类其实可以看作是一个字符的vector,vector上的各种操作都可以适用于string,另外,string类对对象还支持字符串的拼合、转换等操作。 Exampl原创 2016-06-25 02:30:05 · 2532 阅读 · 0 评论 -
ACM/ICPC竞赛之STL--stack
ACM模版stack(栈)和queue(队列)是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)和queue(队列)的实现。准确的说,STL中的stack和queue不同于vector、list等容器,而是对这些容器进行了重新的包装。这里我们不去深入讨论STL的stack和queue的实现细节,而是来了解一些他们的基本使用。stackstack模版类的定义在<stack>头原创 2016-06-25 02:52:06 · 2228 阅读 · 0 评论 -
ACM/ICPC竞赛之STL--queue
ACM模版stack(栈)和queue(队列)是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)和queue(队列)的实现。准确的说,STL中的stack和queue不同于vector、list等容器,而是对这些容器进行了重新的包装。这里我们不去深入讨论STL的stack和queue的实现细节,而是来了解一些他们的基本使用。queuequeue模版类的定义在<queue>头原创 2016-06-25 03:42:19 · 2753 阅读 · 0 评论 -
ACM/ICPC竞赛之STL--map
ACM模版map在STL的头文件中<map>中定义了模版类map和multimap,用有序二叉树表存储类型为pair<const Key, T>的元素对序列。序列中的元素以const Key部分作为标识,map中所有元素的Key值必须是唯一的,multimap则允许有重复的Key值。可以将map看作是由Key标识元素的元素集合,这类容器也被称为“关联容器”,可以通过一个Key值来快速决定一个元素,因原创 2016-06-25 04:20:59 · 4366 阅读 · 0 评论 -
ACM/ICPC竞赛之STL--algorithm
ACM模版algorithm<algorithm>无疑是STL中最大的一个头文件,它是由一大堆模板函数组成的。以下列举出<algorithm>中的模版函数: A adjacent_findB binary_searchC copy / copy_backward / count / count_ifE equal / equal_rangeF fill / fill_n原创 2016-06-25 05:23:20 · 3211 阅读 · 0 评论 -
欧拉函数PHI
ACM模版递推求解using namespace std;const int MAXN = 100;int phi[MAXN + 2];int main(int argc, const char * argv[]){ for (int i = 1; i <= MAXN; i++) { phi[i] = i; } for (int i = 2; i原创 2016-06-28 15:15:37 · 5192 阅读 · 6 评论 -
GCD
ACM模版GCD最大公约数int gcd(int x, int y){ if (!x || !y) { return x > y ? x : y; } for (int t; t = x % y, t; x = y, y = t); return y;}快速GCDint kgcd(int a, int b){ if (a == 0原创 2016-06-28 15:38:57 · 3655 阅读 · 0 评论 -
模线性方程(组)
ACM模版公共部分(扩展GCD)int extgcd(int a, int b, int &x, int &y){ if (b == 0) { x = 1; y = 0; return a; } int d = extgcd(b, a % b, x, y); int t = x; x = y;原创 2016-06-29 15:48:02 · 2004 阅读 · 0 评论 -
线性方程组(高斯消元)
ACM模版列主元/* * 列主元gauss消去求解a[][] * x[] = b[] * 返回是否有唯一解,若有解在b[]中 */#define fabs(x) ((x) > 0 ? (x) : (-x))#define eps 1e-10const int MAXN = 100;int gaussCpivot(int n, double a[][MAXN], double b[])原创 2016-06-29 17:55:48 · 2686 阅读 · 0 评论 -
素数相关
ACM模版判断小于MAXN的数是不是素数/* * 素数筛选,判断小于MAXN的数是不是素数 * notprime是一张表,false表示是素数,true表示不是 */const int MAXN = 1000010;bool notprime[MAXN];void init(){ memset(notprime, false, sizeof(notprime)); no原创 2016-06-30 21:16:22 · 3111 阅读 · 2 评论 -
合数相关
ACM模版合数分解/* * 合数的分解需要先进行素数的筛选 */const int MAXN = 10000;int prime[MAXN + 1];// 获取素数void gerPrime(){ memset(prime, 0, sizeof(prime)); for (int i = 2; i <= MAXN; i++) { if (!prim原创 2016-07-02 12:34:44 · 2781 阅读 · 1 评论 -
求逆元
ACM模版扩展欧几里得法参考:《素数相关》/* * 扩展欧几里得法(求ax + by = gcd) */// 返回d = gcd(a, b);和对应于等式ax + by = d中的x、ylong long extendGcd(long long a, long long b, long long &x, long long &y){ if (a == 0 && b == 0)原创 2016-07-02 14:05:00 · 1930 阅读 · 4 评论 -
高斯消元
ACM模版高斯消元/* * 高斯消元(浮点数) */#define eps 1e-9const int MAXN = 220;double a[MAXN][MAXN]; // 方程的左边的矩阵double x[MAXN]; // 等式右边的值,求解后x存的就是结果int equ, var; // 方程数和未知数个数// 返回0无解,返回1原创 2016-07-04 03:22:26 · 617 阅读 · 0 评论 -
FFT
ACM模版FFTconst double PI = acos(-1.0);// 复数结构体struct Complex{ double x, y; // 实部和虚部 x + yi Complex(double _x = 0.0, double _y = 0.0) { x = _x; y = _y; } Comple原创 2016-07-05 17:04:21 · 5680 阅读 · 2 评论 -
A^B约数之和
ACM模版A^B约数之和对MOD取模参考:《合数相关》/* * 求A^B的约数之和对MOD取模 * 需要素数筛选和合数分解的算法,需要先调用getPrime(); * 参考《合数相关》 * 1+p+p^2+p^3+...+p^n */const int MOD = 1000000;long long pow_m(long long a, long long n){ lo原创 2016-07-07 15:16:58 · 1539 阅读 · 0 评论