自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Running Snail

写代码是一种艺术,甚于蒙娜丽莎的微笑!不拼博,枉少年!

原创 ~~双链表(数据结构)

模板// e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点int e[N], l[N], r[N], idx;// 初始化void init(){ //0是左端点,1是右端点 r[0] = 1, l[1] = 0; idx = 2;}// 在节点a的右边插入一个数xvoid insert(int a, in...

2020-04-30 22:15:06 75

原创 ~~单链表(数据结构)

模板// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点int head, e[N], ne[N], idx;// 初始化void init(){ head = -1; idx = 0;}// 在链表头插入一个数avoid insert(int a){ e[idx] = a, ne[idx] = h...

2020-04-30 22:14:23 81

原创 ~~匈牙利算法

时间复杂度是 O(nm), n 表示点数,m 表示边数int n1, n2; // n1表示第一个集合中的点数,n2表示第二个集合中的点数int h[N], e[M], ne[M], idx; // 邻接表存储所有边,匈牙利算法中只会用到从第一个集合指向第二个集合的边,所以这里只用存一个方向的边int match[N]; // 存储第二个集合中的每个点当前匹配的第...

2020-04-30 22:11:53 86

原创 ~~染色法判别二分图

时间复杂度是 O(n+m), n 表示点数,m 表示边数int n; // n表示点数int h[N], e[M], ne[M], idx; // 邻接表存储图int color[N]; // 表示每个点的颜色,-1表示未染色,0表示白色,1表示黑色// 参数:u表示当前节点,c表示当前点的颜色bool dfs(int u, int c){ co...

2020-04-30 22:11:10 72

原创 ~~Kruskal算法

时间复杂度是 O(mlogm), n 表示点数,m 表示边数int n, m; // n是点数,m是边数int p[N]; // 并查集的父节点数组struct Edge // 存储边{ int a, b, w; bool operator< (const Edge &W)const { return...

2020-04-30 22:10:26 76

原创 ~~朴素版prim算法

时间复杂度是O(n2+m), n 表示点数,m 表示边数int n; // n表示点数int g[N][N]; // 邻接矩阵,存储所有边int dist[N]; // 存储其他点到当前最小生成树的距离bool st[N]; // 存储每个点是否已经在生成树中// 如果图不连通,则返回INF(值是0x3f3f3f3f), 否则返回最小生成...

2020-04-30 22:09:13 68

原创 ~~floyd算法

时间复杂度是 (n3), n 表示点数初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d[i][j] = INF;// 算法结束后,d[a][b]表示a到b的最短距...

2020-04-30 22:08:00 74

原创 ~~spfa判断图中是否存在负环

时间复杂度是 O(nm), n 表示点数,m 表示边数int n; // 总点数int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N], cnt[N]; // dist[x]存储1号点到x的最短距离,cnt[x]存储1到x的最短路中经过的点数bool st[N]; // 存储每个点是否在队...

2020-04-30 22:07:05 57

原创 二分搜索:lower_bound 与 upper_bound 函数

基本用法:lower_bound 和upper_bound需要用在一个有序数组和容器中。(1)lower_bound (first,last,val)用来寻找在数组和容器[first,last)的范围内,第一个值大于等于val的元素的位置。如果是数组,则返回该位置的指针,如果是容器,则返回该位置的迭代器。(2)upper_bound(first,last,val)用来寻找在数组和容器[fi...

2020-04-27 16:27:54 174

原创 NOI Online能力测试2视频版,让我们看看出题专家怎么说!(入门组)

【CCF】NOI Online能力测试2入门组第一题 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 ) ...

2020-04-27 15:44:58 476 1

原创 *1LL在c++中的意义

LL其实代表long long,*1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量例子:long long ans;int num;ans=1LL * num*(num+2)*2;//num在* 1LL之后类型就转换为long long,防止溢出...

2020-04-27 13:01:40 166

原创 C++标准库---逆转元素reverse()&reverse_copy()

逆转元素次序reverse(beg,end)reverse_copy(sourceBeg,sourceEnd,destBeg)reverse()会将区间[beg,end)内的元素全部逆序;reverse_copy()会将源区间[sourceBeg,sourceEnd)内的元素复制到"以destBeg起始的目标区间",并在复制过程中颠倒安置次序;reverse_copy()返回目标区间内最...

2020-04-27 12:45:22 148

原创 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )

时间限制:1.0 秒空间限制:256 MB题目描述球球是一位建筑师。一天,他收到市长的任务:建设城市。球球打算建造2n 座高楼。为了保证城市美观,球球做出了如下计划:球球喜欢整齐的事物。他希望高楼从左向右排成一行,编号依次为 1∼2n。 球球喜欢整数,他要求每座高楼的高度都是正整数。 由于材料限制,高楼的高度无法超过m。 球球喜欢中间高,两边低的造型。他要求前n座...

2020-04-25 18:21:17 715 1

原创 荆轲刺秦王(【CCF】NOI Online 能力测试2 入门组第二题 )

时间限制:3.0 秒空间限制:512 MB题目描述时隔数年,刺客荆轲再次来到咸阳宫,试图刺杀嬴政。咸阳宫的地图可以描述为一个n行m列的矩形。在这里,我们规定每一行中从左到右为x轴正方向,每一列中从下到上为y轴正方向,左下角的点坐标为 (1,1)。矩形中的点可以分为 4 种:起点,也就是荆轲的所在点,在地图中用字符"S"代表。 终点,也就是嬴政的所在点...

2020-04-25 18:16:21 955

原创 未了(endless)(【CCF】NOI Online 能力测试2 入门组第一题 )

时间限制: 1.0 秒空间限制: 256 MB题目描述由于触犯天神,Sisyphus 将要接受惩罚。宙斯命 Sisyphus 推一块巨石上长度为 L的山坡。Sisyphus 匀速向上推的速度为每年 v 的长度(由于是匀速,故经过1/2年将能向上推 1/2的长度)。然而,宙斯并不希望 Sisyphus 太快到达山顶。宙斯可以施展 n 个魔法,若宙斯施展第 i个魔法(1≤i≤n),则当 Sis...

2020-04-25 18:08:55 708

原创 游戏match(【CCF】NOI Online能力测试2 提高组第三题 )

题目背景1s 512M题目描述小 A 和小 B 正在玩一个游戏:有一棵包含 n=2m个点的有根树(点从1∼n 编号),它的根是 1 号点,初始时两人各拥有 m 个点。游戏的每个回合两人都需要选出一个自己拥有且之前未被选过的点,若对手的点在自己的点的子树内,则该回合自己获胜;若自己的点在对方的点的子树内,该回合自己失败;其他情况视为平局。游戏共进行 m 回合。作为旁观者的你只想知道,在他们随...

2020-04-25 13:06:07 1432

原创 子序列问题sequence(【CCF】NOI Online能力测试2 提高组第二题 )

题目背景2s 512M题目描述给定一个长度为 n的正整数序列 A1, A2, ⋯, An 。定义一个函数 f(l,r) 表示:序列中下标在 [l,r]范围内的子区间中,不同的整数个数。换句话说,f (l,r) 就是集合 {Al,Al+1, ⋯,Ar } 的大小,这里的集合是不可重集,即集合中的元素互不相等。现在,请你求出由于答案可能很大,请输出答案对 109+7 取模的结果。输入格式...

2020-04-25 12:57:58 500

原创 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )
原力计划

题目背景1s 256M题目描述你有 1020个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色:编号是 p1 倍数的格子(包括 00 号格子,下同)染成红色。编号是 p 2倍数的格子染成蓝色。编号既是 p1倍数又是 p 2倍数的格子,你可以选择染成红色或者蓝色。其中 p1和 p2是给定的整数,若格子编号是 p1或 p2的倍数则它必须要被染色。在忽略掉所...

2020-04-25 12:46:47 1619

原创 定义一个Point类,派生出Circle类,计算各派生类对象的面积Area()

定义一个Point类,派生出Circle类,计算各派生类对象的面积Area()#include<iostream> using namespace std; class Point { protected: int x,y; public: Point(){} int GetX() {...

2020-04-24 10:18:35 965

原创 打字遇到不认识的字还在上网查?用电脑自带输入法,1秒帮你解决!(附个输入法对比评测及总结)
原力计划

打字时遇到不认识的字怎么办?你之前的方法可能是:在手机上手写出那个字来再复制粘贴或者在搜索引擎里面查出读音再打不过今天我就要给你介绍一个好办法!用Win 10自带输入法1秒就能解决!Win 10自带 微软拼音输入法 绝对要get!一个字的每部分都认识,合到一起就不认识了怎么办?这个时候就可以用到u模式的拆分输入了。输入“u+那个字的组成”,即可找到这个字哦!例如“又双叒叕...

2020-04-23 18:18:44 194

原创 ~~spfa 算法(队列优化的Bellman-Ford算法)(附模板题)

模板时间复杂度 平均情况下 O(m),最坏情况下 O(nm), n表示点数,m 表示边数int n; // 总点数int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储每个点到1号点的最短距离bool st[N]; // 存储每个点是否在队列中// 求1号点到n号点的最...

2020-04-14 15:58:18 76

原创 ~~Bellman-Ford算法

时间复杂度 O(nm), n 表示点数,m 表示边数int n, m; // n表示点数,m表示边数int dist[N]; // dist[x]存储1到x的最短路距离struct Edge // 边,a表示出点,b表示入点,w表示边的权重{ int a, b, w;}edges[M];// 求1到n的最短路距离,如果无法从1走到n,则返回...

2020-04-13 22:08:13 74

原创 ~~堆优化版dijkstra

时间复杂度 O(mlogn), n 表示点数,m 表示边数typedef pair<int, int> PII;int n; // 点的数量int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边int dist[N]; // 存储所有点到1号点的距离bool st[N]; // 存储每个点的最短...

2020-04-13 22:06:08 104

原创 ~~朴素dijkstra算法

时间复杂是 O(n2+m), n 表示点数,m 表示边数int g[N][N]; // 存储每条边int dist[N]; // 存储1号点到每个点的最短距离bool st[N]; // 存储每个点的最短路是否已经确定// 求1号点到n号点的最短路,如果不存在则返回-1int dijkstra(){ memset(dist, 0x3f, sizeof dist); ...

2020-04-13 22:05:14 81

原创 ~~拓扑排序

时间复杂度 O(n+m), n 表示点数,m 表示边数bool topsort(){ int hh = 0, tt = -1; // d[i] 存储点i的入度 for (int i = 1; i <= n; i ++ ) if (!d[i]) q[ ++ tt] = i; while (hh <= tt)...

2020-04-13 22:03:51 47

原创 ~~树与图的遍历

时间复杂度 O(n+m), n 表示点数,m 表示边数(1) 深度优先遍历int dfs(int u){ st[u] = true; // st[u] 表示点u已经被遍历过 for (int i = h[u]; i != -1; i = ne[i]) { int j = e[i]; if (!st[j]) dfs(j); }...

2020-04-13 22:02:41 48

原创 ~~树与图的存储

树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:// 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int h[N], e[N], ne[N], idx;// 添加一条边a->b...

2020-04-13 22:01:01 44

原创 ~~分解质因数法求组合数

当我们需要求出组合数的真实值,而非对某个数的余数时,分解质因数的方式比较好用:1. 筛法求出范围内的所有质数2. 通过 C(a, b) = a! / b! / (a - b)! 这个公式求出每个质因子的次数。 n! 中p的次数是 n / p + n / p^2 + n / p^3 + …3. 用高精度乘法将所有质因子相乘int primes[N], cnt; // 存储所有质数...

2020-04-13 21:59:08 135

原创 ~~Lucas定理

若p是质数,则对于任意整数 1 <= m <= n,有: C(n, m) = C(n % p, m % p) * C(n / p, m / p) (mod p)int qmi(int a, int k) // 快速幂模板{ int res = 1; while (k) { if (k & 1) res = (LL...

2020-04-13 21:55:38 44

原创 ~~通过预处理逆元的方式求组合数

模板首先预处理出所有阶乘取模的余数fact[N],以及所有阶乘取模的逆元infact[N]如果取模的数是质数,可以用费马小定理求逆元int qmi(int a, int k, int p) // 快速幂模板{ int res = 1; while (k) { if (k & 1) res = (LL)res * a % p; ...

2020-04-13 21:54:48 70

原创 ~~高斯消元模板

模板// a[N][N]是增广矩阵int gauss(){ int c, r; for (c = 0, r = 0; c < n; c ++ ) { int t = r; for (int i = r; i < n; i ++ ) // 找到绝对值最大的行 if (fabs(a[i][c]) &g...

2020-04-13 21:51:50 44

提示
确定要删除当前文章?
取消 删除