模板
邵光亮
要为自己喜欢的事情不留余力
展开
-
大数模板
当成int直接用。struct BigInt{ const static int mod=10000; const static int DLEN=4; int a[100],len; //位数4*100 BigInt() { ms(a),len=1; } BigInt(int v) { ms(a),len=0; do{ a[len++]=v%mod,v/=mod; }while(v); } BigInt(const char *s)原创 2020-07-27 17:50:19 · 137418 阅读 · 0 评论 -
miller_rabin大素数随机检测模板
用到两个定理:费马小定理二次探测定理如果 ppp 是一个素数, 0<x<p0<x<p0<x<p,则方程 x2≡1(modp)x^2≡1(mod p)x2≡1(modp) 的解为 x=1x=1x=1 或 x=p−1x=p-1x=p−1。对于待检测数 ppp 在 [2,p][2,p][2,p] 中随机选取 sss 次 aaa 判断 a(p−1)≡1(modp)a(p-1) ≡ 1(mod p)a(p−1)≡1(modp) 是否成立原创 2020-07-22 13:55:32 · 137123 阅读 · 1 评论 -
分数GCD和LCM
ll a, b, c, d;ll x, y;int main(){ sd(t); while (t--) { sldd(x, y); a = x / gcd(x, y), b = y / gcd(x, y); sldd(x, y); c = x / gcd(x, y), d = y / gcd(x, y)...原创 2020-03-19 07:58:59 · 137780 阅读 · 0 评论 -
欧拉函数模板
求欧拉函数值Code:Code:Code:int phi(int n){ int i, rea = n; for (i = 2; i * i <= n; i++) { if (n % i == 0) { rea = rea - rea / i; while (n % i == 0)...原创 2020-01-13 16:08:49 · 91 阅读 · 0 评论 -
2019年ICPC银川 I Base62(高精度进制转换)
\quad题意就是一个x进制的数z转化成y进制,一个有62进制。不就是高精度模板题吗AC代码:#include <cstdio>#include <vector>#include <queue>#include <cstring>#include <cmath>#include <map>#include ...原创 2019-11-30 17:32:06 · 772 阅读 · 2 评论 -
主席树or权值线段树模板
#include <cstdio>#include <vector>#include <queue>#include <cstring>#include <cmath>#include <map>#include <set>#include <string>#include <io...原创 2019-11-27 20:46:08 · 90 阅读 · 0 评论 -
Floyd 判断最小环
给你一张无向图,定义环为从i出发到达j然后从j返回i并且所有点都只经过一次(最少为3个点),求所有环当中经过路径花费最小的环,花费相同优先选择经过点少的路径。模板:#include<algorithm>#include<iostream>#include<cstdio>const int INF=0x3f3f3f3f;using namespa...原创 2019-09-10 19:28:19 · 722 阅读 · 0 评论 -
大数加法 减法 模板
加法:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<stdlib.h>#include<queue>#include<map>#inclu...原创 2019-08-16 15:59:13 · 572 阅读 · 0 评论 -
筛法求素数
求素数是程序设计比赛中经常遇到的问题,最基本的方法是通过素数的定义直接判断,只能被1和它本身整除的数就是素数了。这种方法适合判断单个数是否为素数,当要求一个范围内素数而这个范围又比较大时,这种方法就不太使用了,甚至程序要运行几分钟才能算出结果。筛法的思想是去除要求范围内所有的合数,剩下的就是素数了,而任何合数都可以表示为素数的乘积,因此如果已知一个数为素数,则它的倍数都为合数。普通的线性筛法:...原创 2018-12-20 18:09:57 · 395 阅读 · 0 评论 -
大数相乘 (模板)
输入两个不超过200位的大数,输出它们的积输入样例1234567890098765432100输出样例1219326311126352690000在下面的例子程序中,用 a[220]和b[220]分别存放两个乘数,用z[440]来存放积。计算的中间结果也都存在z中,长度取400 是因为两个200 位的数相乘,积最多会有400 位。a[0], b[0], z[0]都表...原创 2019-08-16 15:14:08 · 735 阅读 · 0 评论 -
lowbit 计算
lowbit(n)取出非负整数n在二进制表示下最低位的1,以及它后面的0构成的数值。设n>0,n的第k位是1,第0~k位都是0.为了实现 lowbit操作,先把n取反,此时第k位变成0,第0~k-1位都是1.再令 n=n+1,此时因为进位,第k位变成1,第0~k-1位都是0.在上面的取反加1操作后,n的第k+1到最高位恰好与原来相反,所以n&(~n+1)仅有第k位为1,其...原创 2019-08-12 15:55:18 · 917 阅读 · 0 评论 -
分块模板题
题目描述给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。输入格式第一行输入一个数字 n 第二行输入 n 个数字,第 i 个数字为a[i],以空格隔开 接下来输入 n 行询问,每行输入四个数字 opt, l,r,c, 以空格隔开 若 opt = 0,表示将 [l,r] 的之间的数都加 c 若 opt = 1,表示询问 a[r] 的值(l 和 c 忽略)输出格式对于每...原创 2019-08-15 09:23:48 · 802 阅读 · 0 评论 -
读入挂
可以加快一点读入速度,本地测试需要加读写文件Code:namespace fastIO { #define BUF_SIZE 100000 //fread -> read bool IOerror = 0; inline char nc() { static char buf[BUF_SIZE], *p1 = buf + BUF_SI...原创 2019-08-07 20:55:28 · 479 阅读 · 0 评论 -
延迟标记 (线段树)
延迟标记在线段树中,单点修改时,我们是将信息从叶节点向上依次更新它的父节点,直到根节点。如果在区间修改仍然按照这个策略,那么修改的时间复杂度为O(N)。为了降低时间复杂度,我们可以在更新时只更新大区间,不向下更新到叶子节点,等查询时再更新。举个例子:我们将1-5的位置上每个数+100,重复10000次上述操作。我们加10000次100和直接+1000000是相等的效果,但是一个执行了1000...原创 2019-08-14 15:15:57 · 2835 阅读 · 0 评论 -
用数组模拟大数快速幂
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<stdlib.h>#include<queue>#include<map>#include<...原创 2019-08-08 16:02:07 · 640 阅读 · 0 评论 -
KMP模板
KMP算法的重点就是next数组的处理具体理解课参考这篇博客:点击这里模板:普通版本:void GetNext(char* p,int next[]){ int pLen=strlen(p); next[0]=-1; int k=-1; int j=0; while(j<pLen) { //p[k]表示前缀,p[j]表示后缀 if(k==-1|...原创 2019-08-01 16:27:23 · 565 阅读 · 0 评论 -
字符串hash模板
字符串Hash函数将一个字符串映射为一个非负整数, 且两个不同的字符串映射值相同的概率极低, 下面介绍字符串Hash函数:取固定值P, 将字符串看做P进制数, 对于字符串中的每种字符分配一个大于零小于P的整数值, 通常使得该数值远小于P. 例如对于小写字母构成的字符串, 可取a = 1, b = 2...z = 26, 取一固定正整数M, 计算该P进制数对M的余数作为该字符串的Hash值...原创 2019-07-31 15:56:18 · 801 阅读 · 0 评论 -
快速幂模板
求m^k%p,时间复杂度O(logk)O(logk)。int qmi(int m, int k, int p){ int res = 1, t = m; while (k) { if (k&1) res = res * t % p; t = t * t % p; k >>= 1; }...原创 2019-07-31 15:44:37 · 576 阅读 · 0 评论 -
树与图的遍历
树与图的深度优先遍历*:树其实也是图的一种图:分为有向图和无向图图的储存:第一种:邻接矩阵,就是一个二维数组,缺点:当点和边特别多的时候,存不下,一般用的比较少,而且非常浪费空间第二种:邻接表:由n个单链表组成,也可以用vector动态数组来实现,但vector有很大的缺点,当点和边非常大时,用vector动态数组的方法很容易超时,所以我们常用n个但链表的方式来存储图树与图的遍历...原创 2019-08-03 15:56:11 · 785 阅读 · 0 评论