- 博客(31)
- 收藏
- 关注
原创 P1638 逛画展(尺取法)
博览馆正在展出由世上最佳的m位画家所画的图画。游客在购买门票时必须说明两个数字,a和b,代表他要看展览中的第a幅至第b幅画(包含ab)之间的所有图画,而门票的价钱就是一张图画一元。Sept 希望入场后可以看到所有名师的图画。当然,他想最小化购买门票的价格。请求出他购买门票时应选择的ab,数据保证一定有解。若存在多组解,a。
2024-02-26 16:11:28
1067
1
原创 LCIS及路径输出
优化:f[i][j]由f[i-1][j]和f[i-1][j]+1得到,当a[i]=b[j]时由最大的f[i-1][j]转移而来可用一个val存储f[i-1][j]的最大值。f[i][j]表示以b[j]结尾的最长LCIS。
2024-01-24 17:24:09
413
原创 树的重心问题
*树的重心:**对于任意一个节点x,如果我们把它从树中删除,那么原来的一棵树可能分成若干个不相连的部分,其中每一部分都是一棵子树,设max_part(x)表示在删除x后的最大的子树大小,使max_part取到最小值的节点p就称之为树的重心。
2023-04-07 19:56:27
129
原创 快速幂的几种方法
1.朴素算法o(n)long long qpow3(long long a,long long b){ long long s=1; for(int i=1;i<=b;i++) s=s*a%mod; return s;} 2.1递归快速幂o(logn)long long qpow(long long a,long long b){ if(b==0)return 1; else if(b%2==0){ t=qpow(a,b/2); //不能直接retur.
2022-04-26 19:48:22
233
原创 欧拉函数试除法与筛法求解
欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=pa11pa22…pamm,则:ϕ(N) = N×(p1−1)/p1×(p2−1)/p2×…×(pm−1)/pm与n互质的数的和为:n*ϕ(n)/2证明如下:则根据该公式可得求一个数的欧拉函数的代码为:试除法求解即在质因数分解的过程中将欧拉函数求出,复杂度为n\sqrt{n}n#include <bits/stdc++.h>using namespace std;int
2022-04-23 21:50:23
435
原创 互质与欧拉函数
对于正整数,gcd(a,b)=1,则称a,b互质。若gcd(a,b,c)=1,则称a,b,c互质,gcd(a,b)=gcd(a,c)=gcd(b,c)=1,则称a,b,c两两互质。欧拉函数:1-N中与N互质的数的个数被称为欧拉函数,即为φ(N).若N=p1c1p2c2p3c3…pmcm则:φ(N)=n (p1-1)/(p1) *(p2-1)/(p2)*……(pm-1)/pm*代码如下在分解质因数的同时可将欧拉函数求出int oula(int a){ ans=a; for(
2022-04-18 11:21:13
1257
原创 质数筛法,欧拉筛与埃氏筛的比较
埃氏筛为常见的质数筛法,其原理为利用已知的质数作为因子将其他合数标记,则剩下的未标记的均为质数其代码如下:此算法的复杂度为O(NloglogN)#include <bits/stdc++.h>using namespace std;const int N=1000;bool b[N];int main(){ for(int i=2;i<=sqrt(N);i++){ //i作为N的一个因子最大可达sqrt(N) if(!b[i]){ for(int j=i;j
2022-04-15 21:39:13
342
原创 字符串读入问题
#include <bits/stdc++.h>using namespace std;int main(){ char a[5],c[6]; string b; gets(c);//可以将空格读入,但在算法竞赛中不安全,建议不适用 scanf("%[^\n]s",a);//可以将空格读入,直到换行结束 getline(cin,b);//可以将string类型的空格读入,直到换行为止 ,较慢 cout<<a<<endl<<b; retur
2022-04-01 19:46:46
77
原创 最小生成树Kruskal算法
最小生成树定义:给定一张带权的无向图G=(V,E),n=|v|,m=|E|.由V中全部n个顶点和E中n-1条边构成的无向联通子图被称为G的生成树 (n-1条边可用于判断是否为生成树,若超出则不为生成树)。边的权值之和最小的生成树被称为最小生成树。Kruskal算法流程如下:1.建立并查集,每个点各自构成一个集合。2.把所有的边按照权值从小到大排序,一次扫描每条边(x,y,z)3.若x,y属于同一集合(联通),则忽略这条边,继续扫面下一条边。4.否则合并x,y所在的集合,并且把z累加到答案中。5.
2022-03-01 21:39:08
278
原创 堆优化dijkstra
第三个点可能有无法到达的点P3371 【模板】单源最短路径(弱化版)关于初始化为什么要设置为0x3f可参考此篇文章0x3f#include <bits/stdc++.h>using namespace std;const int N=5e5+100;const int inf=2147483647;//可能又无法到达的点故初始化为整型边界int edg[N],head[N],ver[N],ne[N],vis[N],dis[N],n,m,s,idx;priority_queue&l
2022-02-23 21:51:00
163
原创 朴素的dijkstra
朴素的dijkstra适合用于处理稠密图即其n2n^2n2<m#include <bits/stdc++.h>using namespace std;const int N=1e3+10;int a[N][N],dis[N],vis[N],n,s,m;int main(){ cin>>n>>m>>s; memset(dis,0x3f,sizeof(dis)); memset(a,0x3f,sizeof(a)); for(int i=1;
2022-02-23 20:09:45
738
原创 LCS 及路径输出
单纯LCS#include <bits/stdc++.h> using namespace std;string s1,s2;int f[1010][1010],len1,len2,ans;int main(){ cin>>s1>>s2; len1=s1.size(); len2=s2.size(); for(int i=1;i<=len1;i++) for(int j=1;j<=len2;j++) { if(s1[i-1]
2021-11-16 21:56:50
415
原创 LIS 优化 及路径输出
1259:【例9.3】求最长不下降序列#include <bits/stdc++.h>using namespace std;const int N=100000+10;const int INF=0x3f3f3f3f;int n,f[N],a[N],st[N],res,tot,last[N],ans[N];int main(){ memset(st,-INF,sizeof(st)); cin>>n; for(int i=1;i<=n;i++) cin&g
2021-11-15 21:31:41
535
原创 队列queue与struct
当需要对struct入队时,可以使用如下格式方法入队struct node {int num;int step;};queueq;q.push((node){a,0}); \\入队node t=q.front() ;q.pop();\\调取队头即可直接使用队头数据了
2021-08-07 16:29:54
679
原创 1246:膨胀的木棍
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1246:膨胀的木棍时间限制: 1000 ms 内存限制: 65536 KB提交数: 3207
2021-04-20 11:50:49
259
原创 单链表的创建和访问
关于链表的创建及访问#include <iostream>using namespace std;struct node { int data; node *next; };node *head,*p,*r;//R指向链表的当前最后一个结点,可以称之为尾指针 int main(){ int x; cin>>x; head=new node;//申请节点头 r=head; while(x!=-1){ p=new node;//申请新的空间 p-&g
2020-12-23 21:39:05
351
原创 double和float精度问题
关于double和float的精度问题,float精度大约6-7位,double精度大致`15到16位。正如图片中所示
2020-12-23 21:34:59
177
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人