常用模板代码
#算法模板与key_code
OPA_heiyaa
嗨嗨嗨
展开
-
栈模板--实现数据的逆序输出
#include<iostream>#include<stack>using namespace std;int n=10;int main(){ stack<int>s; int a[]={1,2,3,4,5,6,7,8,9,10}; for(int i=0;i<10;i++){ s.push(a[i]); } for(int i=0;i<10;i++){ printf("%d ",s.top()); s.pop(); .原创 2021-01-08 17:10:35 · 921 阅读 · 0 评论 -
模式匹配--KMP算法
问题:输入一个字符串,然后输入一个字符串的子串,将第一次出现的子串删除,输出新的字符串,具体见示例.sample1 inputABCDEFG CDEsample1 outputABCDEFG-CDE=ABFGsample2 input123456723672sample2 output123456723-672=123453思路一:穷举搜索,直接从第一个主串元素开始匹配,朴素版本的kmp算法,时间复杂度O(lstr*lstrsub);#include<stdio.h&原创 2021-01-07 20:28:13 · 225 阅读 · 0 评论 -
模板--判断两条线段是否相交--计算几何
模板--判断两条线段是否相交--计算几何;两个结构体表示的是该条直线的A,B两个端点;const int maxa=1e2+10;const double pi=0.00000001;struct nodea{ int x,y;}a[maxa];struct nodeb{ int x,y;}b[maxa];bool check(nodea a,nodeb b,nodea c,nodeb d){ if(!(min(a.x,b.x)<=max(c.x,d.x) &原创 2020-05-18 10:29:28 · 1564 阅读 · 2 评论 -
模板--STL之nth_element()--取容器中的第n大值
头文件:#include<algorithm>作用:nth_element作用为求第n大的元素,并把它放在第n位置上,下标是从0開始计数的,也就是说求第0小的元素就是最小的数;如:a[start,end]元素区间。排序后a[n]就是数列中第n+1大的数(下标从0開始计数);注意:1.a[start,n),a[n,end]内的大小顺序还不一定;2.仅仅能确定a[n]是数列中第n+1大的数。当然a[start,n)中的数肯定不大于a[n,end]中的数;3.nth_element原创 2020-05-16 16:31:49 · 152 阅读 · 0 评论 -
模板--逆元求法--LibreOJ--110
这是一道模板题。给定正整数nn与pp,求1∼n1∼n中的所有数在模pp意义下的乘法逆元。Input一行两个正整数nn与ppOutputnn行,第ii行一个正整数,表示ii在模pp意义下的乘法逆元。样例输入10 13样例输出179108112534思路一:费马小定理;#include<algorith...原创 2020-05-07 10:55:01 · 475 阅读 · 0 评论 -
模板--HihoCoder--1303--解线性方程组
题目不再描述;输入第1行:1个正整数, N,2≤N≤1,000。第2..N+1行:2个正整数, 第i+1行表示第i组m,r,2≤m≤20,000,000,0≤r<m。计算过程中尽量使用64位整型。输出第1行:1个整数,表示满足要求的最小X,若无解输出-1。答案范围在64位整型内;Sample Input33 25 37 2Sample Output2...原创 2020-05-07 08:26:47 · 129 阅读 · 0 评论 -
模板--HihoCoder--1298--欧拉函数
思路:https://blog.csdn.net/queque_heiya/article/details/105947772直接上模板即可;#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>usin...原创 2020-05-06 16:19:43 · 115 阅读 · 0 评论 -
模板--HihoCoder --1297--扩展欧几里得
HihoCoder --1297--扩展欧几里得求最大公倍数与不定方程的解;LL gcd(LL a,LL b){ return b?gcd(b,a%b):a;}void extgcd(LL a,LL b,LL &x, LL &y){ if(b){ extgcd(b,a%b,y,x); y-=(a/b)*x; } ...原创 2020-05-06 16:17:27 · 150 阅读 · 0 评论 -
模板--HihoCoder--1296--约瑟夫问题
HihoCoder--1296--约瑟夫问题代码一:超时#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;typedef long long LL;LL n...原创 2020-05-06 16:14:39 · 126 阅读 · 0 评论 -
模板--欧拉函数模板
欧拉函数的值等于不超过m并且和m互为质数的个数;1.求欧拉函数值:时间复杂度O(sqrt(n));LL euler_deall(LL n){ LL res=n; for(int i=2;i*i<=n;i++){ if(n%i==0){ res=res/i*(i-1); for(;n%i==0;n/=i); } } if(n!=1) rea=res/n*(...原创 2020-05-06 11:55:41 · 145 阅读 · 0 评论 -
质数判断超详解--HihoCoder--1295--Eular质数筛法||Miller_Rabin算法
问题描述:前驱质数查找--统计前缀和类似https://blog.csdn.net/queque_heiya/article/details/105931133思路一:采取素数筛法,初始化求解,但是依旧暴力;代码如下:时间7953ms;#include<cstdio>#include<cstring>#include<algorithm>#i...原创 2020-05-05 20:13:54 · 187 阅读 · 0 评论 -
前驱质数查找--统计前缀和
问题:给出n(<=1e5),统计小于等于n的质数个数;思路:多个输入输出,采用初始化方法;#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<iostream>#define ll long longusing ...原创 2020-05-05 12:59:47 · 167 阅读 · 0 评论 -
HihoCoder--1287--Miller-Rabin质数测试
题目不再多叙述:Miller-Rabin质数测试;思路:https://blog.csdn.net/queque_heiya/article/details/105928679https://blog.csdn.net/queque_heiya/article/details/105929064代码如下:#include<iostream>#include<c...原创 2020-05-05 10:47:07 · 166 阅读 · 0 评论 -
模板--快速幂运算||快速乘运算
快速幂运算模板:(1)时间复杂度:O(log(n));非递归调用;typedef long long ll;ll mod_pow(ll x,ll n,ll mod){ ll res=1; while(n>0){ if(1&n) res=res*x%mod; x=x*x%mod; n=n>>1; } return res;}(...原创 2020-05-05 10:44:22 · 293 阅读 · 0 评论 -
模板--Miller-Rabin素数测试算法
一.引用原因:在数据范围在LL类型之中,N_maxLL=1e18,即使在O(sqrt(n))的时间复杂度之内也不能够满足要求,这时候我们可以对其进行Miller-Rabin 素数测试,可以大概率测出其是否为素数,大部分情况下是正确的;二.理论基础:(1)费马小定理:当为质数,有,不过反过来不一定成立,也就是说,如果,互质,且,不能推出是质数;(2)二次探测:如...原创 2020-05-05 10:38:03 · 274 阅读 · 0 评论 -
LibreOJ--135--二维树状数组--平面修改+平面查询
这是一道模板题。给定一个大小为N×MN×M的零矩阵,直到输入文件结束,你需要进行若干个操作,操作有两类: 1 a b c d x,表示将左上角为(a,b)(a,b),右下角为(c,d)(c,d)的子矩阵全部加上xx; 2 a b c d,表示询问左上角为(a,b)(a,b),右下角为(c,d)(c,d)为顶点的子矩阵的所有数字之和。 Input第一行两...原创 2020-05-03 09:37:27 · 320 阅读 · 0 评论 -
LibreOJ--134--二维树状数组--平面修改+单点查询
这是一道模板题。给出一个n×mn×m的零矩阵AA,你需要完成如下操作:1 a b c d k:表示左上角为(a,b)(a,b),右下角为(c,d)(c,d)的子矩阵内所有数都自增kk; 2 x y:表示询问元素Ax,yAx,y的值;Input输入的第一行有两个正整数n,mn,m;接下来若干行,每行一个操作,直到文件结束。Output对于每个2操作,...原创 2020-05-03 09:33:32 · 200 阅读 · 0 评论 -
LibreOJ--133--二维树状数组--单点修改+平面查询
这是一道模板题。给出一个n×m的零矩阵AA,你需要完成如下操作:1 x y k:表示元素Ax,y自增k; 2 a b c d:表示询问左上角为 (a,b),右下角为(c,d)的子矩阵内所有数的和。Input输入的第一行有两个正整数n,m;接下来若干行,每行一个操作,直到文件结束。Output对于每个2操作,输出一个整数,表示对于这个操作的回答。样例...原创 2020-05-02 21:09:02 · 436 阅读 · 0 评论 -
POJ--1195--二维树状数组--单点更新+平面查询
有一个正方形游戏背包,大小为S*S(1<=S<=1024)。含有很多小格子,小格子编号从0开始,直到S-1。每一个格子里有一定数量的物品,同时每一个格子的物品里的数目也是不断变化的,现在要一边进行修改某些单位格子内的物品的数目,同时也要询问某些区域的手机数目。 数据保证每个格子内物品数目一直在int范围内,查询的格子内的物品数目也在int范围内Input有多组数据,每一行先输入...原创 2020-05-02 20:46:21 · 192 阅读 · 0 评论 -
LibreOJ--132--区间修改+区间查询
这是一道模板题。给定数列a[1],a[2],…,a[n]a[1],a[2],…,a[n],你需要依次进行qq个操作,操作有两类:1 l r x:给定l,r,xl,r,x,对于所有i∈[l,r]i∈[l,r],将a[i]a[i]加上xx(换言之,将a[l],a[l+1],…,a[r]a[l],a[l+1],…,a[r]分别加上xx); 2 l r:给定l,rl,r,...原创 2020-05-02 20:08:09 · 279 阅读 · 0 评论 -
LibreOJ--6227--区间修改+单点查询
给出一个长为nn的数列,以及nn个操作,操作涉及区间加法,单点查值。Input第一行输入一个数字nn。第二行输入nn个数字,第ii个数字为aiai,以空格隔开。接下来输入nn行询问,每行输入四个数字optopt、ll、rr、cc,以空格隔开。若opt=0opt=0,表示将位于[l,r][l,r]的之间的数字都加cc。若opt=1opt=1...原创 2020-05-02 20:05:06 · 278 阅读 · 0 评论 -
LibreOJ--131--区间修改+单点查询
这是一道模板题。给定数列a[1],a[2],…,a[n]a[1],a[2],…,a[n],你需要依次进行qq个操作,操作有两类:1 l r x:给定l,r,xl,r,x,对于所有i∈[l,r]i∈[l,r],将a[i]a[i]加上xx(换言之,将a[l],a[l+1],…,a[r]a[l],a[l+1],…,a[r]分别加上xx); 2 i:给定ii,求a[i]...原创 2020-05-02 20:03:26 · 272 阅读 · 0 评论 -
LibreOJ--130--单点修改+区间查询
这是一道模板题。给定数列a[1],a[2],…,a[n]a[1],a[2],…,a[n],你需要依次进行qq个操作,操作有两类:1 i x:给定i,xi,x,将a[i]a[i]加上xx; 2 l r:给定l,rl,r,求∑ri=la[i]∑i=lra[i]的值(换言之,求a[l]+a[l+1]+⋯+a[r]a[l]+a[l+1]+⋯+a[r]的值)。Input...原创 2020-05-02 20:00:18 · 264 阅读 · 0 评论 -
HDU--1556--区间查询+区间更新
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?Input每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数...原创 2020-05-02 19:57:51 · 188 阅读 · 0 评论 -
LibreOJ--109--并查集+快速幂运算
这是一道模板题。维护一个nn点的无向图,支持:加入一条连接uu和vv的无向边 查询uu和vv的连通性由于本题数据较大,因此输出的时候采用特殊的输出方式:用00或11代表每个询问的答案,将每个询问的答案依次从左到右排列,把得到的串视为一个二进制数,输出这个二进制数mod998244353mod998244353的值。请务必使用快读。Input...原创 2020-05-01 16:53:06 · 253 阅读 · 0 评论 -
程序设计技巧--快读--read();
读取速度:cin<scanf<<read;void read(int &x){ x=0;bool f=0; char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=1;ch=getchar();} while(isdigit(ch)) {x=x*10+ch-'0';ch=getcha...原创 2020-05-01 16:52:49 · 764 阅读 · 0 评论 -
LibreOJ--103--KMP算法模板
这是一道模板题。给定一个字符串AA和一个字符串BB,求BB在AA中的出现次数。AA和BB中的字符均为英语大写字母或小写字母。AA中不同位置出现的BB可重叠。Input输入共两行,分别是字符串AA和字符串BB。Output输出一个整数,表示BB在AA中的出现次数。Example样例输入zyzyzyzzyz样例输出3Hi...原创 2020-05-01 11:13:27 · 542 阅读 · 0 评论 -
HDU--3792--Twin Prime Conjecture--筛选素数+前缀和
If we define dn as: dn = pn+1-pn, where pi is the i-th prime. It is easy to see that d1 = 1 and dn=even for n>1. Twin Prime Conjecture states that "There are infinite consecutive primes differing b...原创 2020-04-28 09:10:18 · 198 阅读 · 0 评论 -
HDU--1879--改进最小生成树--两种idea
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)...原创 2020-04-27 09:26:32 · 142 阅读 · 0 评论 -
HDU--1878--欧拉回路--并查集
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结束。Output...原创 2020-04-27 09:23:04 · 160 阅读 · 0 评论 -
并查集--判断图的连通性--模板
并查集--判断图的连通性;1.图连通,其连通分量一定不大于1;2.并查集模板;int n,m;int father[N];int Find(int x){ if(father[x]==-1) return x; return father[x]=Find(father[x]);}void Union(int x,int y){ x=Fi...原创 2020-04-27 09:20:06 · 214 阅读 · 0 评论 -
HDU--1877--进制转换
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。Input输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。当m为0时输入结束。Output输出格式:每个测试用例的输出占一行,输出A+B的m进制数。Sample Input8 1300 482 1 70Sampl...原创 2020-04-27 07:48:33 · 101 阅读 · 0 评论 -
HDU--1237--表达式求值--栈的运用--掌握模板
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。Input测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。Output对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。思路:代码参考:https://blog.csdn.ne...原创 2020-04-26 16:14:04 · 136 阅读 · 0 评论 -
HDU--1233--prim()算法
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正...原创 2020-04-26 13:16:04 · 121 阅读 · 0 评论 -
HDU--1683--prim算法
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。Input测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N行对应村庄间道路的成本,每...原创 2020-02-22 15:11:14 · 103 阅读 · 0 评论 -
HDU--1240--Asteroids--三维迷宫模板题
题目描述:https://vjudge.net/problem/HDU-1240/origin;思路:bfs()模板题目;#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring> #include<q...原创 2020-04-26 13:05:45 · 174 阅读 · 1 评论 -
小数转换为二进制--代码
问题:输入小数,即输入的小数小于1,转化为二进制代码输出;实例1:输入:0.8125输出:0.1101实例2:输入:0.625输出:0.101实例3:输入:0.8输出:0.1100110011001100110011001100110011001100110011001101图片来源:https://blog.csdn.net/defineYouMyHea...原创 2020-04-23 16:13:45 · 2371 阅读 · 1 评论 -
字符串的排序问题--长度+字典序
问题:对字符串排序,先保证长度,然后在长度相同的情况下保证字典序最小;#include<cstdio>#include<cstring>#include<iostream>using namespace std;char a[][5]={"12","13","123","1234","21","34"};int n=6;void len_sor...原创 2020-04-03 10:45:56 · 943 阅读 · 0 评论 -
交换字符串--memcpy()函数--swap()函数
交换字符串--memcpy()函数;void *memcpy(void *dst, const void *src, size_t n);//If copying takes place between objects that overlap, the behavior is undefined.简单字符交换;swap(a,b);但是对于字符串怎么交换,实际上用复制函数即可;...原创 2020-03-11 14:17:06 · 2593 阅读 · 0 评论 -
字符串排序函数--qsort()
字符串排序函数--fsort()用法:qsort(char *a,int len=strlen(a),sizeof(a[0]),intcmp);具体代码如下:#include<cstdio>#include<algorithm>#include<iostream>using namespace std;#include<cstrin...原创 2020-03-04 10:25:43 · 1284 阅读 · 0 评论