- 博客(25)
- 收藏
- 关注
原创 stl常见用法
vector(变长数组),倍增的思想,支持比较运算(按字典序) 定义:: vector <int> a; 定义:一个vector数组a vector <int> a(10); 定义:一个长度为10的vector数组a vector <int> a(10,3); 定义:一个长度为10的vector数组a,并且所有元素都为3 常用函数:: size(); 返回元素个数 empty(
2022-01-23 15:33:16 133
原创 字符串哈希
#include <iostream>using namespace std;typedef unsigned long long ULL;const int N=100010,P=131;int n,m;char str[N];ULL h[N],p[N];ULL get(int l,int r){ return h[r]-h[l-1]*p[r-l+1];}int main(){ scanf("%d%d%s",&n,&m,str+1);
2022-01-23 15:32:36 314
原创 模拟散列表开放寻址法
#include <iostream>#include <cstring>using namespace std;const int N=200003,null=0x3f3f3f3f;int h[N];bool find1(int x){ int k=(x%N+N)%N; while(h[k]!=null && h[k]!=x){ k++; if(k==N) k=0; } return
2022-01-14 16:18:00 195
原创 模拟散列表拉链法
#include <iostream>#include <cstring>using namespace std;const int N=100003;int h[N],e[N],ne[N],idx;void insert1(int x){ int k=(x%N+N)%N; e[idx]=x; ne[idx]=h[k]; h[k]=idx++;}bool find1(int x){ int k=(x%N+N)%N;
2022-01-14 16:00:25 275
原创 acwing模拟堆
#include <iostream>#include <algorithm>#include <string.h>using namespace std;const int N=100010;int h[N],ph[N],hp[N],size1;//ph[k]存的是第k个插入点在堆内下标,hp[k]是堆内第k个结点是第几个插入的点void head_swap(int a,int b){ swap(ph[hp[a]],ph[hp[b]]);
2022-01-14 00:22:23 258
原创 acwing堆排序
#include <iostream>#include <algorithm>using namespace std;const int N=100010;int n,m;int h[N],size1;void down(int u){ int t=u; if(u*2<=size1 && h[u*2]<h[t]) t=u*2; if(u*2+1<=size1 && h[u*2+1]<h[
2022-01-13 23:06:33 99
原创 并查集应用:连通分量及每分量结点数
#include <iostream>using namespace std;const int N=100010;int n,m;int p[N],size1[N];int find1(int x){ if(p[x]!=x)p[x]=find1(p[x]); return p[x];}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { p
2022-01-13 22:52:27 209
原创 并查集相关
#include <iostream>using namespace std;const int N=100010;int p[N];int n,m;int find(int x){ if(p[x]!=x)p[x]=find(p[x]); return p[x];}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) p[i]=i; while(m--)
2022-01-13 15:46:28 85
原创 trie树
trie树用于建立和查找字符串的数据结构#include <iostream>using namespace std;const int N=100010;int son[N][26],cnt[N],idx;char str[N];void insert(char str[]){ int p=0; for(int i=0;str[i];i++){ int u=str[i]-'a'; if(!son[p][u])son[p][
2022-01-13 15:31:46 93
原创 kmp算法
#include <iostream>using namespace std;const int N=10010,M=100010;int n,m;char p[N],s[M];int ne[N];int main(){ cin>>n>>p+1>>m>>s+1; //求next过程 for(int i=2,j=0;i<=n;i++){ while(j&& p[i]
2022-01-11 19:49:51 121
原创 acwing单调队列
#include <iostream>using namespace std;const int N=1000010;int n,k;int a[N],q[N];int main(){ scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf("%d",&a[i]); int hh=0,tt=-1; for(int i=0;i<n;i++){ if(h
2022-01-11 17:13:46 273
原创 acwing单调栈
#include <iostream>using namespace std;const int N=100010;int n;int stk[N],tt;int main(){ cin>>n; for(int i=0;i<n;i++){ int x; cin>>x; while(tt&&stk[tt]>=x)tt--; if(tt)
2022-01-11 16:54:51 213
原创 模拟栈队列
const int N=100010;int stk[N],tt==0;//插入stk[++tt]=x;//弹出tt--;//判断栈是否为空if(tt>0) not empty;else empty;//栈顶stk[tt];//*************队列int q[N],hh,tt=-1;q[++tt]=x;//插入hh++;//弹出if(hh<=tt) not empty else empty //取出队头元素q[hh]
2022-01-11 16:07:08 131
原创 双链表数组模拟
int m;int e[N],l[N],r[N],idx;//初始化void init(){ r[0]=1;l[0]=0; idx=2;}//在下标是k的结点右边插入void add(int k,int x){ e[idx]=x; r[idx]=r[k]; l[idx]=k; l[r[k]]=idx; r[k]=idx; idx++;}void remove_k(int k){ r[l[k]]=r[k]; l[r[k]]=l[
2022-01-11 15:45:44 168
原创 Acwing 826 单链表
#include <iostream>using namespace std;struct Node{ int val; Node * next;};//不常用//new node;//很慢const int N=100010;int head,e[N],ne[N],idx; //head表示头节点下标//e[i]表示节点i的值//ne[i]表示i的next指针//idx表示当前已经用到哪个点void init(){ head=-1;
2022-01-11 15:06:20 389
原创 中缀转后缀并计算
#include <iostream>#include <cstdio>#include <string>#include <stack>#include <queue>#include <map>using namespace std;struct node { double num; char op; bool flag;};string str;stack<node>
2022-01-09 14:49:26 49
原创 acwing区间合并
#include <iostream>#include <algorithm>#include <vector>using namespace std;typedef pair<int,int> PII;const int N=100010;int n;vector<PII> segs;void merge(vector<PII> &segs){ vector<PII> res;
2022-01-07 15:00:00 97
原创 acwing 802 区间和
#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N=300010;typedef pair<int,int> PII;int n,m;int a[N],s[N];vector<int> alls;vector<PII> adds,query;int find(int x){
2022-01-07 14:45:01 72
原创 二进制中1的个数
#include <iostream>using namespace std;int lowbit(int x){ return x&-x;}int main(){ int n; cin >> n; while(n--){ int x; cin >> x; int res=0; while(x) {x-= lowbit(x); res++;}
2022-01-07 13:51:39 360
原创 最大不连续序列长度
#include <iostream>using namespace std;const int N=100010;int n;int a[N],s[N]={0};int main(){ cin >> n; for(int i=0;i<n;i++) cin >>a[i]; int res=0; for(int i=0,j=0;i<n;i++){ s[a[i]]++; whil
2022-01-04 23:00:58 540
原创 大整数运算
#include <iostream>#include <stdio.h>#include <vector>using namespace std;const int N=1e6+10;vector<int> add(vector<int>&A,vector<int>&B){ vector<int> C; int t=0; for(int i=0;i<A.
2022-01-04 22:06:21 52
原创 最大公约数
最大公约数int gcd(int a,int b){ if(b==0) return a; else return (b,a%b);}
2022-01-04 17:12:19 149
原创 二分查找模板
二分查找模板int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; else l = mid + 1; } return l;}int bsearch_2(int l, int r){ while (l < r) { int mid =
2022-01-03 19:01:30 215
原创 算法笔记:归并排序
在这里插入代#include <iostream>using namespace std;const int N=100010;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,r); int k=0,i=
2022-01-03 17:20:59 477
原创 算法笔记:快速排序
#include <iostream>using namespace std;const int N=100010;int n;int q[N];void quick_sort(int q[],int l,int r){ if(l>=r) return; int x=q[(l+r)/2],i=l-1,j=r+1; while(i<j){ do i++; while(q[i]<x); do j--; while
2022-01-03 13:44:40 54
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人