自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 UVA 12504 Updating a Dictionary(算法竞赛入门经典,stl)

算法竞赛入门经典,stl本题要点:1、处理每一条字符串的时候,使用 字符串流stringstream 来处理,先把原来的字符串中的字符 ‘{’, ‘}’, ‘,’ 替换为 空格 ’ ', 然后就好处理了。2、使用 map<string, string> 来记录每一条字符串中对应 的 key 和 value3、寻找第二天字符串新 增加的, 删除的, 修改的字符串,各自用一个 set 来存,寻找一个 map 中,是否存在字符串 str , 用find函数。#include<bi

2020-08-30 22:56:40 107

原创 UVA 12100 Printer Queue(算法竞赛入门经典,stl, 优先级队列)

算法竞赛入门经典,stl, 优先级队列题目意思:一台打印机,有一个打印序列,表示各个打印任务的优先级。然后,每次要打印当前任务时候,看看队列中后面是否有任务的优先级更紧急,如有,就把当前的任务加入到队列的末尾。否则,打印当前的队列。本题要点:1、使用 队列 queue ,和 priority_queue 来模拟。用数组 prio_num[i] 表示优先级为i的有多少个队列 queue 存放的是各个打印任务,priority_queue 存放的是所有的优先级,然后堆顶 top 存放的都是最大的优

2020-08-30 18:41:19 177

原创 HOJ 1873 看病要排队(优先级队列 priority_queue, 巨水)

优先级队列 priority_queue, 巨水本题要点:1、定义一个结构体 person 来描述病人的信息,int enter_id; //进场顺序int priority; //优先级重写运算符< , 注意,先按 优先级从小到大,在按进场顺序从大到小。2、3个医生,每个医生前面都有一条队列。 模拟医生看病顺序。#include <cstdio>#include <cstring>#include <iostream>#include <

2020-08-30 18:37:31 136

原创 HOJ 1702 ACboy needs your help again!(stack 和 queue,巨水)

stack 和 queue,巨水本题要点:1、直接用stl的 stack 和 queue来模拟即可#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <stack>using namespace std;int T, n, flag;char cmd[10];void solve(bool flag){ queue&

2020-08-30 18:35:47 94

原创 HOJ 4841 圆桌问题(stl, 巨水)

stl, 巨水本题要点:1、用 vector 来模拟约瑟夫问题2、注意输出格式,每50个字母就换行。每两个例子之间,有空行。#include <cstdio>#include <vector>#include <cstring>using namespace std;const int MaxN = 33000;bool vis[MaxN];int n, m;void solve(){ vector<int> v; memset(

2020-08-30 18:34:14 102

原创 HOJ 2643 Rank(第二类斯特林数,裸题)

第二类斯特林数,裸题题目意思:给出n个人,计算他们的可能的排名的数目. 学生x 和 y 的关系有三种,x > y, x == y, x < y;本题要点:1、第二类斯特林数,定义:把n个不同相同的元素,放到k个相同的集合,不允许集合为空。 一共有 s2(n, k) 中放法。2、n个学生,可能有 m 个不同的分数, m 的取值范围是 1 <= m <= n;n个学生,放到 m个不同集合里面,有 s2(n, m) 种放法。但是这m个集合的顺序不同的话,视作不同的排名。因此

2020-08-29 18:21:47 131

原创 HOJ 5184 Brackets(卡特兰数,棋盘问题的推导,经典)

卡特兰数,棋盘问题的推导题目意思:定义了括号的合法排列方式,给出一个排列的前一段,问能组成多少种合法的排列本题要点:1、推导过程:n对括号排列,左括号看做是在棋盘沿着 x 方向走, 右括号看做是在棋盘沿着 y 方向走.前面的任意k个括号,左括号的数 >= 右括号的数。相当于在棋盘走,没有超过 y = x 这条线。这就是卡特兰数的定义。2、现在问题有所加深:题目给出一部分括号排列的总长度为 n ,左右括号各为 m = n / 2 个。当给定的排列方式完全合法的时候,剩下需要排列的左右括

2020-08-29 17:23:52 260 1

原创 HOJ 4372 Count the Buildings(第一类斯特林数,经典)

第一类斯特林数题意:一排房子,总共N幢,高度为1~N,从左边能看到F幢,从右边能看到F幢,问房子排列的可能本题要点:1、题目转化为第一类斯特林数:点这里最高的房子必然两边都能看到, 设编号为n, 把n固定。然后左边看到 f - 1 栋房子, 右边看到b - 1 栋房子。 左边的房子分为 f - 1 组, 右边的房子分为 b - 1 组。每一组选一个最高的房子出来做代表。那么楼n的左边,从左到右,组与组之间最高的元素一定是单调递增的,且每组中的最高元素一定排在该组的最左边,每组中的其它元素可以任

2020-08-29 00:49:48 103

原创 HOJ 1130 How Many Trees?(卡特兰数,大数)

卡特兰数,大数本题要点:1、大数求前100项的卡特兰数,打表即可。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 101;int n;struct bign{ int d[1000]; int len; bign() { memset(d, 0, sizeof d); len = 0; }}c[Ma

2020-08-28 17:56:11 120 1

原创 HOJ 2067 小兔的棋盘(卡特兰数)

卡特兰数, 算法竞赛入门到进阶177页本题要点:1、通过组合公式得到的卡特兰公式h[n] = c[2n][n] - c[2n][n - 1]2、题目给出的 n <= 35, 刚好处于 long long的范围。题目要求输出的是 第 n项的 卡特兰数的2 倍。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 36;lo

2020-08-28 17:52:35 171

原创 HOJ 3240 Counting Binary Trees(卡特兰数,扩欧求逆元,经典)

卡特兰数,扩欧求逆元题目意思:n个节点的二叉树,可以构成有 catalan[n] 种不同的二叉树。 sum[n] 是卡特兰数前 n项的总和。每次给出两个数 n, m, 求 sum[n] % m 是多少。本题要点:1、n很大,如果用大数来存第 100000 个卡特兰数,肯定超时。2、卡特兰数的 递推公式h[i] = h[i - 1] * (4 * i - 2) / (i + 1)要求每一个卡特兰数 对m的模, 这里有除法,需要 求 (i + 1) 在模 m的情况下的逆元。3、扩展欧几里得算法

2020-08-28 16:59:19 134

原创 HOJ 2110 Crisis of HDU(普通母函数,模板题)

普通母函数,模板题本题要点:1、用于多项式相乘的两个数组 sup 和 tmp, 开到 5k2、用一个变量标记 last 已经处理完的多项式,系数不等于0 的最大次数。不用每次都要遍历到第 m 项(m项的系数就是答案)3、 其他的套用母函数的模板。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 110, mod = 100

2020-08-27 17:56:37 69

原创 HOJ 3376 Matrix Again(最大费用最大流,拆点建图)

最大费用最大流,拆点建图本题要点:1、 拆点:一共有 n * n 个点, 每个点(i, j)都有一个数值 n * (i - 1) + j定义: 左点位置: n * (i - 1) + j右点位置: n * (i - 1) + j + n * n2、参考老哥的博客建立图:https://blog.csdn.net/chenzhenyu123456/article/details/48009973建立超级源点 s ,超级汇点 t。s 向左上点 (1, 1)的左点建边,容量为2,费用为0;拆点

2020-08-26 22:35:58 79

原创 洛谷 P3381 【模板】最小费用最大流(最小费用最大流,模板题)

最小费用最大流,模板题本题要点:1、最小费用最大流概念:取得最大流的流法有很多,要求是费用最小的那种走法。2、每一条边多了一个花费,表示单位流量需要多少钱。在添加反向边的时候,反向的花费应该是正向边花费的 相反数。3、使用 spfa 来寻找每一条, 从 s到达 t路径的花费最少的路径。相当于在裸的 EK 算法中, 用 spfa 来替换 bfs();这里的数组 dist[i] 表示从 源点 s 到点i的 最少的花费。#include <cstdio>#include <c

2020-08-26 16:47:47 141

原创 洛谷 P2756 飞行员配对方案问题(最大流求二分图最大匹配)

最大流求二分图最大匹配本题要点:1、二分图模型,转换为最大流模型增加一个源点s和汇点t, 源点s和n个左部节点连线,边的容量是1,m个右部节点和汇点t连线, 边的容量是1。然后求该网络图从s到t的最大流,就是原图的二分图最大匹配2、这里要求输出这 k 对的最大匹配。用数组 ans存放,ans[i] 表示点i的下一个节点是哪个节点。在update函数里,更新 ans 数组即可。#include <cstdio>#include <cstring>#include

2020-08-25 22:24:34 100

原创 HOJ 3549 Flow Problem(最大流,裸题)

最大流,裸题题目意思:给你一个N个顶点M条边的有向图,要你求1号点到N号点的最大流.本题要点:1、套用 RK 算法模板#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <algorithm>using namespace std;const int MaxN = 210, MaxM = 2010;const int i

2020-08-25 19:33:23 108

原创 POJ 3469 Dual Core CPU(最小割,建图)

最大流dinic算法,建图题目意思:双核计算机A,B,有n个模块,每个模块都要再CPU中运行,并且知道了每个模块在每个CPU上的运行时间,如果它们运行在同一个cpu,就可以忽略共享数据的花费,否则需要额外的费用,求完成所有任务的最小花费;本题要点:1、最大流量=最小割容量2、建图建图:让两个CPU分别为图的源点s和汇点t,已知每个模块与两个CPU的运行时间Ai,Bi,则对于每个模块,从s连向一条容量为Ai的边到这个模块,在从这个模块连一条容量为Bi的边到t;对于在不同模块运行的模块需要额外的

2020-08-25 19:26:28 151

原创 HOJ 1532 Drainage Ditches(最大流EK算法,裸题)

最大流EK算法,裸题本题要点:1、EK算法的步骤:先用 bfs,判断图中知否存在一条增光路;存在增光路,那么每次更新这条增光路;2、更新增光路:pre[i] 表示增光路上,i点的前一个点的下标incf[i], 表示起点s 到达点i的增光路上各边的最小剩余容量。因此,增光路上的每一条边都应该减去 incf[t]#include #include #include #include #include using namespace std;const int MaxN = 210,

2020-08-25 18:39:49 106

原创 洛谷 P3376 【模板】网络最大流(最大流dinic算法,模板题)

最大流dinic算法,模板题EK算法,每次调用一次 bfs,只能找到一条 增光路。dinic算法每调用一次 bfs, 就可以找到多条的增光路。本题要点:1、dinic 步骤a) 用bfs建立分层图, 实际是一个增广网b) 建立一个分层图后,再 dfs 在增广网,计算所有可能的增广路上的流量的总和.2、dinic 算法的剪枝:当前弧优化:now 数组,记录每个点将要访问的第一条边。在bfs建立分层图的时候,某个点 x 第一次入队列, now[x] = head[x]。在 dfs 的过程中,

2020-08-25 18:20:31 300

原创 HOJ 5007 Post Robot(子串查找,水题)

子串查找,水题本题要点:1、每一行读入,使用 getline ,然后每一次处理一行用 string 的 substr 函数来匹配 这些单词。#include <cstdio>#include <cstring>#include <iostream>#include <string>using namespace std;string line;void solve(){ int len = line.size(); for(int

2020-08-25 13:09:04 137

原创 HOJ 6109 数据分割(并查集,启发式合并)

并查集,启发式合并本题要点:1、每两个数之间,有相等和不等关系。相等关系好处理, 并查集合并,判断根节点是否相等即可。两个数的不等关系,需要用到集合。打个比方, 有一个集合 {3, 4, 99, 150, 18} (表示这些数代表的物品相等),然后 有一条新的式子, 99 7 0(表示 99 和 7 不相等)。 这时候扩展开来,7 和 以上集合的数都不相等。2、用 set 来解决不相等的问题st[i] 这个set 集合,表示与i不相等的数的根节点集合。 //特别注意,这里存的是该数的根节点。不

2020-08-24 16:13:18 96

原创 HOJ 4513 吉哥系列故事——完美队形II(manacher回文串变形)

manacher回文串变形本题要点:1、此题把回文串的条件加强了,条件有3个:a) 要求是回文串b) 数值先递增,到了对称位置达到最大,然后递减。2、 假如此类型的回文串叫做 “加强回文串”, 只需要在 manacher 函数里面,改动一下 while 循环即可。裸的 manacher算法, while 循环的条件while(i - RL[i] >= 0 && i + RL[i] < len && ms[i - RL[i]] == ms[i + R

2020-08-23 17:57:03 88

原创 HOJ 3068 最长回文(manacher回文串,裸题)

manacher回文串,裸题本题要点:1、manacher算法,相对较容易理解。假如字符串的长度是 n,该方法可以在 O(n)的时间内,求出最长的回文串的长度和具体的回文串2、此题很裸。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MaxL = 120005;char s[Max

2020-08-23 17:39:34 66

原创 HOJ 5371 Hotaru‘s problem(manacher回文串变形)

manacher回文串变形本题要点:1、一段序列 s 分为 三段 (假设为 x, y, z 三段)x, y拼接起来 和 y,z 拼接起来都是回文串。2、 用 manacher 算法,在 序列 s 的每个数字之间插入数字0, 得到 数组 ms(ms 数组的个数是 2 * n + 1)用数组 RL[MaxN], RL[i]表示 数组ms 的第i个数的回文半径 + 1。3、 假设当前符合条件的最大回文半径是 ans, 扫描数组 RL, 下标从2 开始。for(int k = 2; k < m;

2020-08-23 17:34:12 81

原创 HOJ 3065 病毒侵袭持续中(AC自动机,求多个子串在主串中出现次数)

AC自动机,求多个子串在主串中出现次数本题要点:1、与HOJ2896 的区别主要是,这里要求每个子串在文本串的出现次数。num[i] 表示第i个病毒出现的次数。 在 query 函数中for(int j = now; j; j = fail[j]) //这里访问一个节点 j 后,不需要把 virus_id[j]置零{ num[virus_id[j]]++;}2、很多老哥提醒,多组数据。 注意 memset trie, fail, num 数组#include <cstdio>

2020-08-22 19:16:32 100

原创 HOJ 2896 病毒侵袭(AC自动机,模板题)

AC自动机,模板题本题要点:1、把多个病毒串,建立 trie, 其中数组virus_id[k] 表示节点是k的点对应的病毒编号 2、建立 fail 数组3、有m个文本串,没依次查询,都会把数组virus_id[k]对应的值赋值为0,防止重复遍历。所以,查询完后,需要把数组 virus_id 的数据恢复原来的样子。我这里用的很 low的方法,直接开一个 数组 virus_id 的副本 virus_id1 。4、一些注意的地方:字符串是可见字符,并不只是小写字母。字典树是 trie[MaxL]

2020-08-22 17:10:11 164

原创 HOJ 4990 Reading comprehension(矩阵快速幂, 裸题)

矩阵快速幂本题要点:1、递推关系,推导矩阵:起始矩阵 resres[0][0] = ans, res[0][1] = 1res[1][0] = 0, res[1][1] = 0i 是奇数的时候, 乘上矩阵 xx[0][0] = 2, x[0][1] = 0x[1][0] = 1, x[1][1] = 1 那么 res * x 的结果矩阵 yy[0][0] = 2 * ans + 1, y[0][1] = 1y1][0] = 0, y[1][1] = 0同理

2020-08-21 16:51:54 135

原创 HOJ 6030 Happy Necklace(矩阵快速幂,递推)

矩阵快速幂,递推难度是递推关系,加入红色 用1表示, 蓝色用0 表示,一串就是一个 01 字符串。任意素数长度范围内,1 的个数 >= 0 的个数。假如有一条合法的 01 串,位数是n, 合法项链数是 f(n). 在这条 01 串后面加1, 必然满足要求。构成的长度 n + 1 的新串,以 1 结尾的合法串项链数 f(n)。如果在这条n长度的 01 串后面加0, 相当于 长度为 n - 2 的 01 串后面加上 3位, 其中 第 n + 1 位确定是0, 剩下的第 n - 1 和 n 位, 有

2020-08-21 16:11:25 129

原创 HOJ 1757 A Simple Math Problem(矩阵快速幂)

矩阵快速幂本题要点:1、k < 10, 之间输出 (k % mod + mod) % mod2、然后迭代计算 10 <= k <= 18 时候, f(k) 的值3、 建立一个起始矩阵 resres.m[0][0] = f(18), res.m[0][1] = f(17), ..., res.m[0][9] = f(9)res.m[1][0] = f(17), res.m[1][1] = f(16), ..., res.m[1][9] = f(8)...res.m[9][0]

2020-08-21 11:47:26 76

原创 POJ 1422 Air Raid(DAG的最小路径覆盖,模板题)

DAG的最小路径覆盖,模板题题目意思:有n个点,m条边的有向无环图,每个点放一名士兵,然后士兵沿着图走,直到不能走为止, 每条只能由一名士兵走过,问最少需要多少士兵。本题要点:1、图很小,可以用邻接矩阵来存图。2、有向无环图,写成对应的二分图:当点x -> y, 看成左部节点x 指向右部节点 y + n, 左部节点的范围 1 ~ n, 右部节点范围 n + 1 ~ 2 * n3、 最小路径覆盖 = 点数 - 二分图最大匹配。#include <cstdio>#inclu

2020-08-20 22:51:50 92

原创 POJ 2771 Guardian of Decency(二分图最大独立集,裸题)

二分图最大独立集,裸题题目意思:有k 个学生,学生有男女,某些男女之间有些可能谈恋爱。老师要带一些学生出去旅游,要求不能有男女之间谈恋爱。本题要点:1、k <= 500, 用邻接矩阵来存图。左部节点: n个男学生右部节点: m个女学生。2、老师要带尽可能多的学生出去,就是取的点尽量多,显然是二分图最大独立集。二分图最大独立集 = 顶点个数 - 二分图最大匹配#include <cstdio>#include <cstring>#include <c

2020-08-20 22:42:14 122

原创 HOJ 1269 迷宫城堡(强连通分量tarjan算法,裸题)

强连通分量tarjan算法,裸题本题要点:1、题目要求,问有向图中,从任意一点是否能够到达其他的任意一点。如果这图是强连通图,也就是强连通分量只有一个的时候,就能到到。2、tarjan算法 求强连通分量scc[i] 表示点i所在的强连通分量编号sccnum 表示强连通分量编号如果 sccnum == 1, 输出 Yes, 否则输出 No#include <cstdio>#include <cstring>#include <algorithm>#in

2020-08-20 18:24:01 112

原创 HOJ 1062 Text Reverse(字符串翻转,细节)

字符串翻转,细节本题要点:1、空格可能有多个2、字符串前缀和后缀都有空格3、用 getline 读入字符串#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <algorithm>using namespace std;int T;string s;void reverse(int a, int b){ for

2020-08-20 14:08:00 144

原创 CodeForces-123A Prime Permutation(并查集,贪心)

并查集,贪心题目意思:给出一个字符串 s, 长度 n <= 1000, 改变字符串的各个字母的顺序,使得:下标是素数的位置(假设为p), s[p] = s[p * i], 1 <= i <= n / p本题要点:1、并查集:把素数位p,满足条件 s[p] = s[p * i], 1 <= i <= n / p 的所有下标全部放到一个集合里面。用一个结构体 来记录,然后按 size 从大到小排序.struct node2 // p[i] 表示以i为父节点信息{

2020-08-20 12:51:14 107

原创 HOJ 4585 Shaolin(map, 迭代器)

map 的使用题目意思:少林的和尚有两个属性,一个是id号,一个是战斗力。一开始少林只有方丈,方丈 id = 1, 战斗力 = 10^9.后来又很多和尚加入了少林,每个和尚都有一个唯一的id号,和一定的战斗力(战斗力可以相等)。和尚是一个一个地加入少林的。加入的时候,必须已经加入少林的和尚中挑选一名和尚进行比武。被挑选的和尚,条件是其 战斗力 和 新加入少林的和尚 的战斗力差值最小。题目给出一个和尚的加入序列(id号,战斗力), 要求输出每次比武的老和尚 的 战斗力。本题要点:1、map 存

2020-08-19 23:33:50 100

原创 HOJ 1272 小希的迷宫(并查集,细节)

并查集,细节本题要点:1、并查集裸题:每次输出两个数 x 和 y, 当x 和 y 不属于同一个集合,那么直接合并。当x 和 y 属于同一个集合,说明从 x 到y有两条不同的路径。 输出 No2、题目注意的地方:当输入的图是不连通时,也是不符合要求的。可以用并查集判断图的连通。3、如果只输入0 0算作一组数据的话答案应该输出Yes#include <cstdio>#include <cstring>#include <iostream>using na

2020-08-19 21:01:23 123

原创 POJ 3041 Asteroids(二分图最小点覆盖, 转化)

二分图最小点覆盖题目意思:有 n * n 的矩阵, 有k个小行星, 有位美女开飞船,开一枪可以消灭一行或者一列的小行星。问,最少开多少枪, 可以消灭所以的小行星。本题要点:1、左部节点: n个横坐标右部节点:n个纵坐标n <= 500, 用邻接矩阵来存图2、 最小点覆盖数定义:就是对于一个图,选取最少数量的点S,使得对于所有的边,都至少有一端点是S中的点。该题目中,小行星的坐标 (x, y) 转化为 二分图 左部的点 x 连上 右部的点y的一条边。求出最小点覆盖数 的 s个点后,

2020-08-19 18:28:42 153

原创 HOJ 3729 I‘m Telling the Truth(二分图最大匹配,建图)

二分图最大匹配,建图本题要点:1、左部节点:学生, 学生的范围 m <= 60右部节点:排名, 名次的范围 n <= 100000每个学生与之对应的可能的排名,都连线。2、题目要求输出最大的匹配数,然后输出学生的序号,按字典序最大的输出。套用 增广路模板,扫描m个学生时候,从 m 到 1 扫描,这样优先给序号大的学生安排排名。最后的结果就是 最大的字典序。3、 增加一个数组,res, res[i] == 1 表示学生i有匹配的排名#include <cstdio>

2020-08-19 16:59:37 86

原创 HOJ 2063 过山车(二分图最大匹配,裸题)

二分图最大匹配,裸题本题要点:1、左部节点:n个男同学,右部节点:m个女同学n <= 500, 用邻接矩阵存图。2、增广路算法,套模板#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int MaxN = 510;int a[MaxN][MaxN], match[MaxN];bool vis[MaxN];int k, n, m;

2020-08-19 15:32:25 96

原创 POJ 3352 Road Construction(边双连通分量)

题目意思:给定一个无向图,图中没有重边,问添加几条边才能使得无向图变为 边双连通图本题要点:1、tarjan算法中,求割边时候,每个点都记录一个时间戳 dfn[i], 和回溯值 low[i]。有多少个不同的low 值,就有多少个边双连通分量。2、缩点:把low值相同的点,看做是一个缩点。用 deg 数组记录每一个缩点的入度。3、问题转化为:在缩点树上,添加多少条边,才能使得树变为一个边双连通图。至少添加边数 = (入度为1的缩点数 + 1) / 2#include <cstdio&

2020-08-18 16:14:20 157

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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