02 2018 档案
摘要:欧拉函数是小于n的正整数中与 n 互质的数的数目,其中规定 φ(1) = 1。比如 φ(8) = 4 (1,3,5,7 和 8 互质),φ(9) = 5 (1,2,4,5,7,8 和 9 互质)。 求欧拉函数的公式是 这个公式就是这个意思 :φ(n) = n * (1 - 1 / p1) * (1
阅读全文
摘要:素数筛法是数论的入门,当然也非常重要。所谓素数(也叫质数),就是因数只有1和它本身的数。 今天讲一下怎么筛素数。 第一种算法,就是最朴素最暴力的算法,是人的都会。就是对于每一个数n,从 i = 2开始,依次判断n能否被i整除。 好想的当然也就慢,这个算法复杂度是O(nlogn),当n为1e7 时就过
阅读全文
摘要:题目大意就是给长度为 n 一个数列,有 n 每次删除,每一次删除第 i 个位置上的数,求每一次删除后剩余不连续数列的最大区间和。 输入样例 4 1 3 2 5 3 4 1 2 输出样例 5 4 3 0 第二行是原来的数列,第三行是删除第 i 个数。 这道题的正解是用并查集来做。要将删除的顺序存下来,
阅读全文
摘要:LCA就是最近公共祖先,比如 节点10和11的LCA就是8,9和3的LCA就是3。 我们这里讲一下用树上倍增来求LCA。 大家都可以写出暴力解法,两个节点依次一步一步往上爬,直到爬到了相同的一个节点。 二树上倍增就是对暴力的优化,改成了一次爬好几步。 具体怎么爬呢?就是两个点每次爬 2^j 步,而
阅读全文
摘要:LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点。 比如这棵树 结点5和6的LCA是2,12和7的LCA是1,8和14的LCA是4。 这里讲一下将LCA转化成RMQ问题,进而用st表求解。 首先我们跑一
阅读全文
摘要:LCA(Lowest Common Ancestor 最近公共祖先)定义如下:在一棵树中两个节点的LCA为这两个节点所有的公共祖先中深度最大的节点。 比如这棵树 结点5和6的LCA是2,12和7的LCA是1,8和14的LCA是4。 这里讲一下用树链剖分来求LCA。 先想一下,若要求结点13和4的LC
阅读全文
摘要:RMQ 即范围最小值问题 (Range Minimum Query)。给出一个 n 个元素的数组,设计一个数据结构,支持查询操作 Query(L, R):计算该区间内的最小值。 如果用朴素的算法的话,每一次一个循环求解,那时间复杂度就达到了 O(mn),显然不够快。在实践中,最常用的是 Tarjan
阅读全文
摘要:前缀和是一种重要的预处理,能大大降低查询的时间复杂度。 最简单的一道题就是给定 n 个数和 m 次询问,每次询问一段区间的和。求一个 O(n + m) 的做法。 用 O(n) 前缀和预处理,O(m) 询问。 主要代码 升级版 给定一个n*n的矩阵,找一个最大的子矩阵,使得这个子矩阵里面的元素和最大。
阅读全文
摘要:先看一到例题 给定 n 个数(可能相同),出现次数最多的数出现了多少次。(ai <= 10 ^ 9) 嗯……这道题看似一道水题,只要开一个 vis 数组记录每一个数字出现的次数即可,比如 vis[a[i]]++。但是值得注意的是,ai可能非常大,这就导致 vis 数组会开不下,因此,就要用到离散化。
阅读全文
摘要:题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1、A2 可以变换为 B2 …。 例如:A='abcd'B='xyz' 变换规则为: ‘abc’->‘xu’‘ud’->‘y’‘y’->
阅读全文
摘要:map map 的意思是映射。用法一般是 map<char, int>mp 按照我的理解,map 类似于一个高级的数组。前面的数据类型 char 相当于下脚标,而数组元素的值就对应着后面的类型 int。例如可以用一个 map<string, int>month_name 来表示“月份名字对应的月份编
阅读全文
摘要:set 是一个内部有序的数据结构,支持添加,删除元素,但不支持修改元素(所以想修改,就要先删再添)。 别忘加上头文件 #include<set> 1.声明 和其他STL一样,set<int>s。 <> 内的是数据类型,后面的是名称。 2.插入元素 s.insert(5)。向 int 型 set 中插
阅读全文
摘要:题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1~N。问从顶点1开始,到其他每个点的最短路有几条。 输入输出格式 输入格式: 输入第一行包含2个正整数N,M,为图的顶点数与边数。 接下来M行,每行两个正整数x, y,表示有一条顶点x连向顶点y的边,请注意可能有自环与重边。 输出格式: 输出
阅读全文
摘要:【题目描述】 给定一个 n 个点 m 条边的加权有向图,求平均权值最小的回路。 【输入格式】 输入第一行为数据组数 T 。每组数据第一行为图的点数 n 和边数 m (n ≤ 50)。以下 m 行每行3个整数 u, v, w, 表示有一条从 u 到 v 的有向边,权值为 w。输入没有自环。 【输出格式
阅读全文