算法
蓝桥杯常见算法模板和技巧
程序媛小y
一枚前端程序媛
展开
-
蓝桥杯读取文件
蓝桥杯读取文件首先文件要和cpp程序放在同一个目录下,比如把要读取的文件和cpp程序都放在桌面上。#include<bits/stdc++.h>using namespace std;int main(){ freopen("a.txt","r",stdin); int tmp; while(scanf("%d",&tmp)!=EOF){ cout<<tmp<<" "; } return 0;}...原创 2022-04-07 21:49:13 · 711 阅读 · 2 评论 -
并查集入门(C++)
并查集入门#include<bits/stdc++.h>using namespace std;#define MAXN 20001int fa[MAXN];void init(int n){ for(int i=1;i<=n;i++) fa[i]=i;//先初始化将所有节点的父节点设为自身 }int find(int x){ if(x==fa[x]) return x; else{ fa[x]=find(fa[x]);//父节点设为根节点 retu原创 2022-04-07 08:10:30 · 963 阅读 · 1 评论 -
蓝桥杯常用功能函数(c++)
蓝桥杯常用功能函数文章目录蓝桥杯常用功能函数1.埃氏筛法2.进制转换3.输入未知长度的数组4.判断素数5.输入条件是以 # 结束6.求最大公约数和最小公倍数7.去掉字符串高位的0 && 去掉字符串低位的08.字母大小写转换9.string型数字相加1.埃氏筛法输出从 M 到 N 的所有素数 输出第5个到第27个素数 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101原创 2022-04-05 22:46:27 · 2337 阅读 · 1 评论 -
蓝桥杯中 int型 与 string类型的转换(C++)
用stringstream 来处理。#include<bits/stdc++.h>using namespace std;int main(){ //int 转 string int number = 12; string str; stringstream ss; ss<<number; ss>>str; cout<<str<<endl; //注意,此时这个流ss中还保存之前流入的数据 ss.clear();//清空原创 2022-04-03 23:40:46 · 597 阅读 · 2 评论 -
%*s 或 %*d在 c++ 输出的作用
%*s 或 %*d在 c++ 输出的作用#include<bits/stdc++.h>using namespace std;int main(){ printf("%*d\n",5,101); return 0;}%*d 要求输出是整数型,比如上述代码中,输出的 101 前面有两个空格。%*d的意思是,输出特定的数字或字符串,要求字符的总长度为多少。#include<bits/stdc++.h>using namespace std;int main()原创 2022-03-16 11:03:31 · 899 阅读 · 0 评论 -
dfs生成全排列
dfs生成全排列模板#include<bits/stdc++.h>using namespace std;int a[]={1,2,3,4};void f(int k){ if(k==4){ for(int i=0;i<4;i++){ cout<<a[i]<<" "; } cout<<endl; } for(int i=k;i<4;i++){ { int t=a[i]; a[i]=a[k];原创 2022-03-14 19:35:21 · 1122 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题的三种解决方式1.递归#include <cstdio>int ans=0;void hanoi(int n,char a,char c,char b)//函数表示共n片圆盘,将A上的圆盘借助B,移动至C//(第一个int为圆盘数,第二个char为圆盘所在,第三个char为目标柱子,第四个char为借助的柱子){ if(n==0) return; hanoi(n-1,a,b,c); ans++;//若想知道具体的移动方法,那就把这里改成:printf("%原创 2022-01-30 01:47:16 · 262 阅读 · 0 评论 -
最近公共祖先(LCA)
一.暴力解法(一)会超时对于点x,y。向上搜索点x节点的父节点,并将搜索到的父节点依次标记为走过,然后再搜索y节点的父节点,当搜索到第一个已经标记了的节点时,即为他们的最近的公共祖先。题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。接原创 2022-01-29 11:57:30 · 1465 阅读 · 0 评论 -
链式前向星
链式前向星#include<bits/stdc++.h>using namespace std;const int maxn=105;int head[maxn];int n,m,x,y,w,cnt;struct Edge{ int to,w,next;}e[maxn*maxn];void init()//初始化 { memset(head,-1,sizeof head); cnt=0; } void add(int u,int v,int w){//添加一条原创 2022-01-29 10:16:34 · 246 阅读 · 0 评论 -
一维和二维差分
一维和二维差分给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c例题:数组长度为6,进行三次操作,在区间为(x,y)内的数加上c6 31 2 2 1 2 11 3 13 5 11 6 1输出:3 4 5 3 4 2#include <bits/stdc++.h>using namespace std;const int N=100010;int n,m;int a[N],b[N];//b数组是差分数组void insert(原创 2022-01-25 05:23:41 · 503 阅读 · 0 评论 -
一维和二维前缀和
一维和二维前缀和一维前缀和一维前缀和:原数组:a1,a2,a3…an前缀和:Si = a1 + a2 + a3 +…+ ai特殊设置:S0=0a[l] + … + a[r] = S[r] - S[l - 1]例题第一行:n m第二行:长度为n的数组,(数组的下标从1开始)接下来m 行:输入区间(l,r)求出该区间的和输出:每个要求的区间的和输入:5 32 1 3 6 41 21 32 4输出:3610#include <bits/stdc++.h>原创 2022-01-25 03:15:24 · 87 阅读 · 0 评论 -
高精度除法
高精度除法#include <bits/stdc++.h>using namespace std;//C=A/Bvector<int> div(vector<int> &A,int b,int &r){ vector<int> C;//商 r=0;//余数 for(int i=A.size()-1;i>=0;i--){ r=r*10+A[i]; C.push_back(r/b); r%=b;原创 2022-01-25 02:40:43 · 169 阅读 · 0 评论 -
高精度乘法
高精度乘法//是一个大数乘以一个较小的数#include <bits/stdc++.h>using namespace std;vector<int> mul(vector<int> &A,int b){ vector<int> C; int t=0; for(int i=0;i<A.size()||t;i++){ if(i<A.size()) t+=A[i]*b; C.push_back(t%10)原创 2022-01-25 01:59:25 · 255 阅读 · 0 评论 -
高精度减法
高精度减法#include <bits/stdc++.h>using namespace std;const int N=1e6+10;//判断A是否>=Bbool cmp(vector<int> &A,vector<int> &B){ if(A.size()!=B.size()) return A.size()>B.size(); for(int i=A.size()-1;i>0;i--){ if(A[i原创 2022-01-25 01:44:36 · 106 阅读 · 0 评论 -
高精度加法
高精度加法#include <bits/stdc++.h>using namespace std;const int N=1e6+10;//C=A+Bvector<int> add(vector<int> &A,vector<int> &B){ vector<int> C; int t=0; for(int i=0;i<A.size() || i<B.size();i++){ if(i原创 2022-01-25 01:27:13 · 99 阅读 · 0 评论 -
浮点数二分模板
浮点数二分bool check(double x) {} // 检查x是否满足某种性质double bsearch_3(double l, double r){ const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求 while (r - l > eps) { double mid = (l + r) / 2; if (check(mid)) r = mid; else l =原创 2022-01-25 00:46:58 · 260 阅读 · 0 评论 -
整数二分边界区别
整数二分整数二分有两种情况bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; // check()判断mid是否满足性质原创 2022-01-25 00:15:31 · 115 阅读 · 0 评论 -
归并排序模板
归并排序#include <bits/stdc++.h>using namespace std;const int N=1e6+10;int n;int q[N],tmp[N];void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1原创 2022-01-24 23:46:41 · 165 阅读 · 0 评论 -
快速排序模板
快速排序1.#include <bits/stdc++.h>using namespace std;const int N=1e6+10;int n;int q[N];void quick_sort(int q[],int l,int r){ if(l>=r) return; //取左端点x=q[l] int x=q[l],i=l-1,j=r+1; while(i<j){ do i++;while(q[i]<x); do j-原创 2022-01-24 23:43:06 · 219 阅读 · 0 评论 -
快速幂及快速幂取模
快速幂及快速幂取模#include <bits/stdc++.h>using namespace std;//快速幂:快速求出a的b次方int quickm(int a,int b){ int ans=1; int rns=a; while(b){ if(b&1){//b&1相当于判断它是奇数还是偶数,若为奇数则为1 ans*=rns; } rns*=rns; //b>>=1;这两种写法都可以 b原创 2022-01-20 13:10:05 · 110 阅读 · 0 评论
分享