- 博客(70)
- 收藏
- 关注
原创 Java初学自用小笔记
面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。类: 就是一个大框比如 c 中的结构体或者int main(){…}这个大框框都可以叫做类,类中可以有其它的小类。例如“人类”是一个类!对象:对象是类的实例,人类“张三”是对象。方法:相当与 c 中的函数。
2021-10-08 17:27:18 429
原创 map / set / queue / vector / stack 集合
map key与valuemap<int , int> node;node.insert(pair<int, int>(a, b)); 如果你定义是<int,int> 你就可以用 node[2] = 3 这种类型来表示也有 map<long, map<int, int>> 你可以有 node[2][4] = 3 也可以用这个来赋值 map<int, int>::iterator a = node.find(key); //
2021-07-09 15:16:07 199
原创 哈希-普通哈希 字符串哈希 tired字典树
字典树:char str[i];把字符串中的每个字母变成一个 haxi值像树一样的存起来一连串的字符一般哈希 : int x;①拉链法:是把一个数字变成一个 hashe值 像邻接表一样挂起来②开放寻址法:就是直接把数字转化为hashe值后放存放在一个简单的数组里字符串哈希:char str[i];一个字符串变成一个 haxi值 存放在一个数组里字符串哈希模板例题:字符串哈希下题解中的P一般取值131、13331mod一般取一个素数,有时候错了就多改大几次,可正确的取值不止.
2021-06-22 14:36:04 354 1
原创 Tired树(字典树)理解与例题
例题:Trie字符串统计题解+模板int son[N][26], cnt[N], idx; //idx 当前用到了的结点的下标 // 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点// cnt[]存储以每个节点结尾的单词数量// 插入一个字符串void insert(char *str) { int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a';
2021-06-18 15:52:11 260
原创 并查集的理解与例题
并查集的理解:https://b23.tv/JnhV80并查集由一个数组、两个函数组成① fa[ ]:记录父亲结点的数组② find:查找函数③ unionm:合并函数代码:
2021-06-17 09:41:18 142
原创 SPFA算法求固定点到其它点 最短 最长 路程问题
点击:理解请参考例题:https://www.luogu.com.cn/problem/P1807如果求最短路径 :f[v]=max(f[v],f[u]+mp[u][i].n);f [ ]数组你要先初始化 无穷大如果求最长路径: f[v]=min(f[v],f[u]+mp[u][i].n);f [ ]数组你要先初始化 无穷小还有就是这个spfa算法跟 关键路径(拓扑) 挺像的 就稍微改改例题正确代码://思路 建立两个表 位置相同 存边的长度#include<bits/stdc++
2021-06-15 20:18:40 268
原创 DFS的记忆化
点击了解:DFS–记忆化DFS–DP之间的联系例题:最大食物链计数(涉及图论)下面的代码是没有记忆化的代码#include<bits/stdc++.h> using namespace std;#define mod 80112002vector<int> G[5050];int rud[5050];queue<int> q;long ans = 0;int dfs(int x){ if(!G[x].size()) { ans++;
2021-06-13 14:56:07 376 2
原创 关键路径(含拓扑序列)
关键路径是以拓扑序列为基础的用来解决类似:事件的最早发生时间事件的最晚发生时间活动的最早发生时间活动的最晚发生时间(事件是结点 活动是边)例题:p1113杂物问题:可以用 dijkstra算法求最短距离来算来代替???答 :一般不行,因为它的边代表的距离不能为负数。 但是上面那个题目好像可以用..先理解:拓扑序列后理解:关键路径...
2021-06-02 20:49:28 333
原创 dijkstra算法O(n^2)单源点到其余各个顶点的最短距离
有向无向用法一样点击:dijkstra算法的理解代码:#define INF 32767; // 表示无穷大 void dijkstra(MGraph *G, int v) // G为指向图的邻接矩阵的指针 v为原点的序号 {****************************************************************************************初始化 int dist[MaxVertexNum], path[MaxVertexNum];
2021-05-25 20:10:56 164
原创 Floyd算法O(n^3)求解带权有向图中任意两顶点间的最短路径
点击:Floyd算法解析就是我们要先把A数组和path数组填好然后就用这个: for ( k=0; k<N; k++ ) //N是顶点数量 for ( i=0; i<N; i++ ) for ( j=0; j<N; j++ ) if ( A[i][j] > A[i][k] + A[k][j] ) { A[i][j] = A[i][k] + A[k][j]; path[i][j] = path[k][j]; }...
2021-05-24 20:51:51 316
原创 图的存储 与 DFS BFS遍历
图的储存结构1.邻接矩阵 P179未完待续2.邻接表 P181typedef struct node//表结点 { int adivex;//邻接域点 struct node *next;//指向下一个邻接点的指针域 //若要表示边上的信息,则要添加一个数据域 info }EdgeNode ;typedef struct vnode //表头结点 { VertexType vertex; //顶点域 EdgeNode * firstedge; //表头指针 }Ve
2021-05-10 21:41:01 241
原创 关于结构体中什么时候用 “.“ 什么时候用“->“以及其他的问题
你的c++结构体是对象时使用 “.” ,是指针时用 "->"struct test{ float a; int b;};test q; q为结构体int a = q.a; 访问对象为 q 结构体 用 "."test *p= &q; p为指向q结构体的指针a=p->a; 访问对象为 p 指针 用 "->"...
2021-05-07 19:22:26 2709
原创 set自用
待理解set参考:https://blog.csdn.net/love20165104027/article/details/81510406
2021-05-06 21:53:04 99
原创 vector自用
注意哦:vector.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素的正确操作为:vector.end() - 1;关于vector理解参考:https://blog.csdn.net/wkq0825/article/details/82255984
2021-05-06 21:24:26 119
原创 map自用
#include<bits/stdc++.h>#include<map>//也包含在万能头文件里 //map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。 using namespace std;int main(){ map<int, int> node; //可以把 pair看为存在 map中的一个结构体,它里面有 key和 value node.insert(pair<int, int>(1, 1));//这种方法赋值相同.
2021-05-01 21:08:49 158
原创 速记下基础的东西
unique(a, a+n);random_shuffle(a,a+n); 打乱 int num = ran()%100+1 ;strcmp(s1, s2); s1字母-s2字母 返回差值strcpy(s1, s2); 把 s1 复制给 s2strncpy(s1, s2, n); 把 s1 中 n个字符 复制给 s2 ceil(-10.5) = -11; 取整 floor(-10.5) = -10;abs() fabs() 绝对值 sqrt()
2021-04-28 19:40:00 92
原创 二叉树
遍历递归遍历:递归前序遍历 void preorder(Node *root){ if(!root) return; printf("%d ", root->val);// 数据 preorder(root->left); //左子树 preorder(root->right); //右子树 }-------------------------------------递归中序遍历 void inorder(Node *root){ if(!root) re
2021-04-26 21:40:08 140
原创 差分数组与前缀和数组
辅助数组参考从侧面来表示给定某一数组的变化,一般用来对数组进行区间修改的操作还是上面那个表里的栗子,我们需要进行以下操作:1、将区间【1,4】的数值全部加上32、将区间【3,5】的数值全部减去5很简单对吧,你可以进行枚举。但是如果给你的数据量是1e5,操作量1e5(10的5次方),限时1000ms你暴力枚举能莽的过去吗?T到你怀疑人生直接。这时我们就需要使用到差分数组了。d[i] = a[i] - a[i-1];注意 只能是区间元素同时增加或减少相同的数的情况才能用可以快速得到
2021-04-12 19:36:36 200
原创 2016蓝桥杯 自用
16年的题目T1煤球数目#include<bits/stdc++.h> using namespace std; //奇数:三边相等 a + (a-1) + (a-2)//偶数:下边多一个 a + (a-1) + (a-1)//错误,不要主观臆断,要从已知的条件找 //正确答案:an = an-1 + n int ans = 1; int t = 1;int main(){ for(int i=2; i<=100; i++) { ans = ans +
2021-04-11 19:44:33 104
原创 #2018蓝桥杯 自用
看题目点击这里T7螺旋折线#include<bits/stdc++.h>using namespace std;//思路://1.首先得到x轴y轴上的规律:只看x轴,-1与+1差值为4,-2与+2差值为4+4 ...4+4+4..然后y轴也类似//2.当x>y时看x,值为 x轴上的值+-y值 // 当y>x时看y,值为 y轴上的值+-x值 // 当x=y时 值就等于x与y轴上分别的值的平均数 #define max 100000000int x[max];int
2021-04-07 19:34:03 96
原创 单链表的翻转
void InvertList(link &head){ link pre,phead,temp; phead = head->next; //将phead指向链表头的下一个结点,做游标使用 pre = NULL; //pre为头指针之前的节点 while(phead != NULL){ temp = pre; pre = phead; phead = phead->next; pre->next = temp; //pre接到之前的节点 }.
2021-03-28 09:20:22 76
原创 链表头插法
#include<bits/stdc++.h>using namespace std;//链表的基本操作步骤: 头插法!!!!!!!!!!!!!!!!!!!!! //(带 *号的备注是我为了建立简单链表的无脑操作) typedef struct Node//结构体(结点)建立完成 { int date; struct Node *next;}SequenList; //int hanshu()是返回一个整数,类比得:下面是返回一个结构体指针。 SequenList *cre
2021-03-25 20:27:59 461
原创 链表
#include<bits/stdc++.h>using namespace std;typedef struct Node{ int date; struct Node *next; }LNode, *linklist; void Illustrate(linklist head)//输出函数的函数 { linklist tem = head; //将头指针的地址赋值给零时指针tem while(tem->next != NULL) { tem = tem
2021-03-22 18:08:11 90
原创 动态规划-01背包
1.动态规划算法与分治法算法的区别:点击这里哦!2.动态规划的讲解:点击这里哦!这上面是Java的代码,c++看思路就行。我看讲解时有个东西没看懂,现在看懂了,记录下,怕以后忘了。背包剩余容量可以装下该商品,此时需要进行判断,因为装了该商品不一定能使最终组合达到最大价值,如果不装该商品,则价值为:K(i,j) = KS(i-1,j),如果装了该商品,则价值为:k(i,j) = KS(i-1,j-wi) + vi,从两者中选择较大的那个,所以就得出了递推关系式:上面的 KS(i
2021-03-08 18:54:44 264 2
转载 C++STL 常用 函数 用法
https://www.cnblogs.com/duoduo369/archive/2012/04/12/2439118.html
2021-02-28 13:41:13 141
转载 标准的快排模板
快排的思维理解:上面的图片解释了一趟快速排序的原理,如果你有足够的想想象力,可以把红色,蓝色下标想象成两个机器人,它们不停的移动去判断值,一但符合条件,就把箱子里的值仍给另一个机器人,自己停止,另一个机器人又开始工作,这样的不停往返的下去,就可以把数分成两个部分了。1.代码(未优化):void quick_sort(int x,int y) { int i=x,j=y,t;//t用于稍后的交换 int k=a[x]
2021-02-20 17:22:13 197
原创 求高精度阶乘的小方法
i* (i-1)! == i !也就是说如果要求 20!先求1!然后2!=2 * 1!3! = 3 * 2!在期间用到高精度乘法
2021-02-17 11:17:17 73
原创 高精加减乘除的主体简单记忆
---------------------------------------------------- 减法 t = a1[i]-b1[i]; t<0?(t+=10,a1[i+1]--):t; a[i] = t; a1[i] = t; ---------------------------------------------------- 加法 t = a1 + b1 a1 = t%10; a1[i+1] = a[i+1] + (t/10); ------...
2021-02-14 19:56:48 121
原创 高精除法
#include<bits/stdc++.h>using namespace std;int c[10000001];//记录结果的数组string s;long long k=0,a,b,i;bool flag;int main(){ cin>>s>>b;//输入被除数和除数 for(int i=0;i<s.size();i++)//从高位开始,一位一位向低位 { a=a*10+s[i]-'0';//加上被除数
2021-02-05 11:42:35 143
原创 高精乘法
for(int i = 0;i < LA;i++)for(int j = 0;j < LB;j++) c[i+j] += a1[i]*b1[j];for(int i = 0;i < LA+LB;i++)//进行处理 把多位数变成单个字,大于10进 1。if(c[i] >= 10) { c[i+1] += c[i]/10; c[i] %= 10; ``}在这里插入代码片 for(int i = 0;i < LA;i++) for(int j = 0;j &.
2021-02-03 16:10:38 174
原创 高精减法(不压位)
#include <cstdio>#include <cstring>int main(){ char a[202]={0}, b[202]={0}; scanf("%s%s", a, b); int alen = strlen(a), blen = strlen(b), t = 0, i; int a1[202]={0}, b1[202]={0}; for (i = 0; i < alen; i++) a1[i] = a[alen-1-i]-'0';//颠倒并
2021-02-03 14:26:59 127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人