
大学期间学习
溺水的鱼xu
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
lower_bound()和upper_bound();
lower_bound()和upper_bound();进行二分查找,底层就是通过二分实现的。看过他们他们的实现的话就会发现他们底层就一个等于号不同。lower_bound():查找第一个大于等于的数,返回值是一个地址lower_upper():查找第一个大于的数,返回值是一个地址...原创 2021-06-10 23:58:47 · 58 阅读 · 0 评论 -
大整数问题的克星
大整数大整数问题的思路说白了就是把字符串反转过来,但记得要对那些短的字符串进行补零,从头开始相加。下面是把字符串存到结构体中写的思路首先把字符串转换成这种形式struct bign{ long long d[maxn]; long long len; bign() { fill(d,d+maxn,0); len=0; }};转换的代码bign change(cha...原创 2020-02-12 14:02:01 · 207 阅读 · 0 评论 -
快速幂和矩阵快速幂
快速幂递归写法long long quick(long long a,long long b){ if(b==0) return 1; if(b%2==1) return a*quick(a,b-1)%mod; else { long long mul=quick(a,b/2)%mod; return mul*mul%mod; }}非递归写法const int mo...原创 2020-02-05 12:27:32 · 119 阅读 · 0 评论 -
L2-025 分而治之
L2-025 分而治之这是一道简单题,写着篇博客主要是给自己提个醒,做题要学会变通这道题我一直在考虑如何对点进行操作,结果超时,但实际上这题对边进行遍历一遍就好了#include<bits/stdc++.h>using namespace std;vector<int>v[10010];int a[10010],b[10010];int vis[10010],...原创 2020-02-24 16:09:21 · 158 阅读 · 1 评论 -
st表、树状数组、线段树和主席树
//树状数组 :单点修改 (+ - * /);// 区间修改( + - 最值)其中+ -要利用查分数组来实现// 单点查询 传统方法// 区间查询 最值得话就循规蹈矩的进行查找/*但是如果使用区间修改过(查分数组)后再进行区间查询,则要进行计算一下∑ni = 1A[i] = ∑ni = 1 ∑ij = 1D[j]; 则A[1]+A[2]+...+A[n]...原创 2019-08-10 17:29:48 · 518 阅读 · 0 评论 -
数据离散化
1.unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。返回的是去重后容器中不重复序列的最后一个元素的下一个元素。写法:unique(begin,end)unique(b...原创 2019-12-02 14:13:17 · 208 阅读 · 1 评论 -
字典树模板
const int maxn=1e5;int tree[maxn][26];int count[maxn];int tot=0;void build(string s){ int len=s.size(); int u=0;//这个要从0开始 ,不然会被后面的覆盖 for(int i=0;i<len;i++) { int v=s[i]-'a'; if(tree[...原创 2019-12-05 16:02:43 · 118 阅读 · 0 评论 -
最短路
Dijkstra每次找一个距离s点最近的一个节点,并更新与该点相连的其他节点到s点的距离n-1次后就求出所有点到s点的最短距离了。#include<iostream>#include<algorithm>#include<vector>using namespace std;const long long maxn=1e5+10;const lo...原创 2019-11-28 22:14:13 · 123 阅读 · 0 评论 -
L2-010 排座位
L2-010 排座位 (25分)布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的...原创 2020-02-12 15:45:54 · 170 阅读 · 0 评论 -
并查集
并查集const int maxn=1e5;//father数组代表的祖先节点,但不一定是最终的祖先节点,//因此,找最终的祖先节点还是要通过findfather函数 int father[maxn]; int findfather(int x){ if(x==father[x]) return x; else { father[x]=findfather(father[x]...原创 2020-02-05 16:02:21 · 127 阅读 · 0 评论 -
主席树——数据结构的克星
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5;struct node{ int e; int l,r; int lazy; node(){ e=lazy=l=r=0; }}tree[maxn*40];int tot=0,a[maxn];vo...原创 2020-01-19 12:29:48 · 293 阅读 · 2 评论 -
堆与堆排序——数据结构的克星
其实建堆和堆排序十分的简单,就是不断的向下调整的过程建堆是从floor(2/i)处开始,一直到根节点,依次不断的向下调整堆排序是从最后一个节点不断的与第一个根节点交换,然后再让第一个节点不断的向下的调整#include<bits/stdc++.h>using namespace std;int a[15]={-1000,1,5,6,3,9,5,4,2,7,7};int n...原创 2020-02-05 11:21:59 · 136 阅读 · 0 评论 -
已知后序和中序,重建二叉树
已知后序和中序,重建这颗二叉树前序:1 2 4 8 9 5 10 3 6 7中序: 8 4 9 2 10 5 1 6 3 7后序:8 9 4 10 5 2 6 7 3 1#include<iostream>using namespace std;int post[100]={8,9,4,10,5,2,6,7,3,1};int in[100]={8,4 ,9,2,10,5,...原创 2019-12-01 16:19:52 · 353 阅读 · 0 评论 -
创建一颗二叉树
#include<iostream>#include<bits/stdc++.h>using namespace std;struct node{ int date; node *lchild; node *rchild; node(){ lchild=rchild=NULL; } };int a[11]={0,1,2,3,4,5,6,7,8,9,1...原创 2019-12-01 16:24:46 · 544 阅读 · 0 评论 -
线段树——数据结构的克星
#include<bits/stdc++.h>using namespace std;const int maxn=1e5;struct node{ int e;// int l,r; int lazy; node() { e=lazy=0; }// int mid(){// return (r+1)>>1;// }}tree[maxn<...原创 2020-01-19 12:28:39 · 2933 阅读 · 3 评论 -
树状数组-——数据结构的克星
树状数组树状数组的tree[i]维护的是前面一段区间的状态,这个视题意而定,比如题目要求一段区间的和,那么树状数组tree[i]表示前面一段区间的和,如果题目要求一段区间的最大值,那么树状数组tree[i]表示前面一段区间的最大值。那么前面的一段区间是多少的,就是将i转换成二进制编码时,第一个1出现是的长度。11101000,它维护的区间长度就是1000的大小,为8.求维护区间长度的具体代码...原创 2020-01-18 23:01:47 · 287 阅读 · 0 评论 -
匈牙利算法和km算法模板
匈牙利算法const int maxn=1e3;int used[maxn],girl[maxn],g[maxn][maxn];void init(){ fill(used,used+maxn,0); fill(g[0],g[0]+maxn*maxn,0); fill(girl,girl+maxn,0); }int dfs(int x){ for(int i=1;i<...原创 2019-09-01 01:13:23 · 332 阅读 · 2 评论 -
dijkstra & prim
几天做到了最短路的问题,于是随手放一个最短路的模板#include<bits/stdc++.h>using namespace std;const int maxn=1e3;//如果写的是0x3f3f3f3f这中形式的话在更新的时候就需要判断一下是否能到达 //否则不能到达时加一下整形就溢出了 ,不过链式向前星存图存的就是可以到达的//点,多此一举了const int in...原创 2020-02-07 11:24:21 · 122 阅读 · 0 评论 -
tarjan算法、割点和割桥,
tarjan算法是求一个图的强连通子图的dfn[u]数组记录的这个节点入树的时间low[u]数组记录的是以u为根节点的子树中最小的时间戳步骤是:通过搜索不断的更新low和dfn数组,没当一条线搜索结束时,那么就会出现一个强连通子图,那么就回溯找根节点(dfn[u]==low[u]),并把这个强连通图给记录下来;const int maxn=1e5;int dfn[maxn],low[ma...原创 2019-12-01 13:48:27 · 350 阅读 · 0 评论 -
欧拉图和哈密顿图
哈密顿图Dirac定理: 无向图,有 N 个节点,若所有节点的度数都大于等于 N/2,则哈密顿回路一定存在。注意,“N/2” 中的除法不是整除,而是实数除法。如果 N 是偶数,当然没有歧义;如果 N 是奇数,则该条件中的 “N/2” 等价于 “⌈N/2⌉”竞赛图:有向图,每对顶点之间都有一条边相连的有向图称为竞赛图在dirac定理的前提下求哈密顿回路const int maxn=1e3;...原创 2019-12-01 13:48:07 · 765 阅读 · 0 评论 -
L2 紧急救援
L2-001 紧急救援 (25分)作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤5...原创 2020-02-07 13:58:10 · 528 阅读 · 0 评论 -
网络流模板
就两个点,先bfs分层,在dfs搜索const int maxn=1e5;queue<int> q;struct node{ int v,c,next;}edge[maxn<<];int head[maxn],dis[maxn],currage[maxn];int tot,s,e;void init(){ fill(head,head+maxn,-...原创 2019-08-12 17:50:27 · 134 阅读 · 0 评论 -
最小圆覆盖模板
实际上是找三个点:如果第一个点没找对的话,以后遇到正确的点会不包含,如果第二个点没找对的话,以后遇到正确的点会不包含,如果第三个点没找对的话,以后遇到正确的点会不包含。所以,只有以后不出现不包含的情况,就是找对了。#include <iostream>#include <string.h>#include <stdio.h>#include <a...原创 2019-08-15 10:07:08 · 205 阅读 · 0 评论 -
斐波那契数列性质
看到好的东西就要盗过来!!!!转载 2020-01-15 22:51:38 · 286 阅读 · 2 评论 -
快速幂取模爆炸怎么办
今天做题突然想到了一道题,这题真的是坑,快速幂会爆炸#include <bits/stdc++.h>typedef long long LL;const int maxn = 5e6 + 1;using namespace std;LL mod = 10000000007;LL a[10][maxn];void init() { for (int i = 1; ...原创 2019-08-16 15:59:35 · 244 阅读 · 1 评论 -
分数的四则运算
1.分数的存储struct node{ int up,down; node() { up=0; down=1; }}result;2.分数的四则运算,以加法为例node add(node a,node b){ node result; result.up=a.up*b.down+a.down*b.up; result.down=a.down*b.down; re...原创 2020-01-24 11:28:35 · 177 阅读 · 0 评论 -
欧几里得、拓展欧几里得和逆元的求解
欧几里得算法int gcd(int a,int b){ if(b==0) { return a; } return gcd(b,a%b);}拓展欧几里得算法最主要的核心就是 x=y y=x-a/b*yint ex_gcd(int a,int b,int &x,int &y){ if(b==0) ...原创 2019-08-25 14:27:58 · 216 阅读 · 0 评论 -
素数欧拉筛
素数筛const int maxn=100000;int prime[maxn],flag[maxn],tot;void getphi(){ for(int i=2;i<=n;i++) { if(!flag[i]) { prime[tot++]=i; for(int j=i+i;j<=n;j+=i) { flag[j]=1; } } }}素数线性筛const int maxn=100000;int prime[maxn],fla原创 2020-09-05 16:49:34 · 141 阅读 · 0 评论 -
回文自动机——字符串的克星
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5;//fail指针指向以该字符结尾的次长会文串//next数组用来存放回文树//len数组用来存储树中每一个节点回文串的长度//S数组用来记录添加过的字符,方便以后通过len数组判断是否是回文串。/*cnt...原创 2020-02-05 13:06:34 · 138 阅读 · 0 评论 -
manacher
manacher马拉车算法说白了就是递推进行优化求回文串的算法就是求p数组,表示以以i为中心的最长回文串的半径核心就是mx和id的使用主要分为三个部分1.要求的i在mx内部 .以i的对称点为中心的回文串完全包含在以id为中心的回文串中 p[i]=p[2*id-i]; .超出了id为中心的回文串边界 p[i]=mx-i+1; 2.i在以id为中心的回文...原创 2020-02-12 11:46:51 · 119 阅读 · 0 评论 -
kmp算法模板
const int maxn=1e4+10;int nex[maxn];//记录的是前缀和后缀最大公共部分的下一位坐标,由数组前后缀最大公共长度右移一位得出 char p[maxn],s[maxn];void init(){ fill(nex,nex+maxn,0); //fill(p,p+maxn,'');}void getnex(){ int i=-1,j=0;//因为求n...原创 2019-08-22 14:54:30 · 248 阅读 · 0 评论 -
trie树
trie树查询某个字符串是否出现过const int maxn=1e3;int trie[maxn][maxn],book[maxn];int tot=0;v0id init(){ fill(tire,tire+maxn*maxn,0); fill(book,book+maxn,0); tot=0; }void build(string s){ int u=0; for...原创 2019-08-28 17:24:58 · 193 阅读 · 0 评论 -
最小表示法
最小表示法首先定义两个变量i,j表示怀疑最小的开始下标,在定义一个变量k表示如果s[i]==s[k]时向后比较s[i+k]和s[j+k];首先明确这里的i和j不分前后1.如果s[i] <s[j],那么j++;2.如果s[j]>s[i],那么i=j++;3.如果s[i]= =s[j],那么就找出s[i+k]!=s[j+k]的位置,1.如果s[i+k]= =s[j+k],那么...原创 2019-12-01 13:47:50 · 162 阅读 · 0 评论 -
后缀数组——字符串的克星
后缀数组仅仅是我个人的理解,估计大家看不太懂,想从头开始学的话还是看这两篇博客吧,不过以后我会把博客更新完整的,先让我消化消化五分钟搞懂后缀数组最详细的后缀数组字符串的后缀数组其实就是对一个字符串的各个后缀字符字串进行排序后的结果。那么难点却是在排序上面,直接暴力对字符串进行排序肯定是不行的,时间复杂度是n方级的,通过观察,你会发现后缀字符串之间是有联系的,你会得到这样的结论,当你求出各...原创 2020-02-05 15:06:08 · 190 阅读 · 2 评论 -
AC自动机模板
AC自动机失配指针failfail指针指向与该节点表示串后缀相等的且长度最大的串(或前缀)的节点fail与kmp算法中的next数组还是有点不同的,next[j]表示的是j之前的前缀和后缀相等,且next指向前缀和后缀相等的前缀下一位,而fail[j]表示的是包含j这一位的前缀和后缀相等,并且指向前缀最后一位下标。 trie[now][i] = trie[fail[now]][i...原创 2019-08-29 00:01:19 · 203 阅读 · 0 评论 -
[蓝桥杯2019初赛]Fibonacci数列与黄金分割
[蓝桥杯2019初赛]Fibonacci数列与黄金分割水题一个#include<iostream>#include<bits/stdc++.h>long long f[100];using namespace std;int main(){ f[1]=1; f[2]=1; for(int i=3;i<=50;i++) { f[i]=f[i-...原创 2020-01-23 19:26:56 · 1520 阅读 · 0 评论 -
EOJ Monthly 2020.1——A. 回文时间
A. 回文时间单点时限: 1.0 sec内存限制: 512 MBCuber QQ 很惊奇地发现 2020 年 1 月 22 日的 10:02:02 构成的字符串竟然是一个回文串。(构成的字符串是 20200122100202 ),这下又有充足的理由约女神吃饭了。可是这之后,女神开始为难 Cuber QQ 了。她现在只允许 Cuber QQ 在回文时间约她吃饭。回文时间指的是,年份(四位数...原创 2020-01-18 09:14:45 · 541 阅读 · 0 评论