算法竞赛进阶指南题解 C++版
文章平均质量分 62
算法竞赛进阶指南题解 C++版
zhb1nk
字节跳动前端工程师
展开
-
【算法竞赛进阶指南】NOI1995 CH3501 石子合并 区间DP
设有N堆沙子排成一排,其编号为1,2,3,…,N。每堆沙子有一定的质量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆沙子的质量之和,合并后与这两堆沙子相邻的沙子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆沙子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,...原创 2019-05-09 20:53:22 · 383 阅读 · 0 评论 -
【算法竞赛进阶指南】CH1807 Necklace 字符串最小表示法
有一天,达达捡了一条价值连城的宝石项链,但是,一个严重的问题是,他并不知道项链的主人是谁!在得知此事后,很多人向达达发来了很多邮件,都说项链是自己的,要求他归还(显然其中最多只有一个人说了真话)。达达要求每个人都写了一段关于自己项链的描述: 项链上的宝石用数字0至9来标示。一个对于项链的表示就是从项链的某个宝石开始,顺指针绕一圈,沿途记下经过的宝石,比如项链: 0-1-2-3 ,它的可能的四...原创 2019-05-09 12:40:42 · 342 阅读 · 0 评论 -
【算法竞赛进阶指南】CH1802 表达式计算4 表达式计算模板
给出一个表达式,其中运算符仅包含+,-,*,/,^(加 减 乘 整除 乘方)要求求出表达式的最终值。数据可能会出现括号情况,还有可能出现多余括号情况。数据保证不会出现大于或等于231的答案。数据可能会出现负数情况。输入格式输入仅一行,即为表达式。输出格式输出仅一行,既为表达式算出的结果。输入样例:(2+2)^(1+1)输出样例:16真正的表达式计算万能模板啊。#incl...原创 2019-05-08 20:43:14 · 808 阅读 · 1 评论 -
【算法竞赛进阶指南】 POJ3468 A Simple Problem with Integers 区间修改区间查询 线段树+懒标记
Description给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。2、“Q l r”,表示询问 数列中第 l~r 个数的和。对于每个询问,输出一个整数表示答案。Input第一行两个整数N,M。第二行N个整数A[i]。接下来M行表示M条指令,每条指令的格式如题目描述所示。数据范...原创 2019-04-27 18:48:40 · 284 阅读 · 0 评论 -
【算法竞赛进阶指南】A Tiny Problem with Integers —— 树状数组 区间修改单点查询
Description给定长度为N的数列A,然后输入M行操作指令。第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。第二类指令形如“Q X”,表示询问数列中第x个数的值。对于每个询问,输出一个整数表示答案。Input第一行包含两个整数N和M。第二行包含N个整数A[i]。接下来M行表示M条指令,每条指令的格式如题目描述所示。数据范围:1≤N,M≤10^5,|d|...原创 2019-04-27 16:41:51 · 455 阅读 · 0 评论 -
【算法竞赛进阶指南】CH4201 楼兰图腾 —— 树状数组
#include <iostream>#include <cstring>using namespace std;using ll = long long;const int maxn = 2e5+10;int a[maxn], c[maxn], r[maxn], l[maxn]; // l[i]:点i左边比i小的点的个数, r[i]:点i右边比i小的点的个数...原创 2019-04-27 12:02:14 · 378 阅读 · 0 评论 -
【算法竞赛进阶指南】洛谷 P1908 逆序对 —— 树状数组+离散化
题目描述猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定义的:对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对。知道这概念后,他们就比赛谁先算出给定的一段正整数序列中逆序对的数目。输入格式:第一行,一个数n,表示序列中有...原创 2019-04-26 22:32:06 · 468 阅读 · 0 评论 -
【算法竞赛进阶指南】 合并果子 —— Huffman树
Description在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节...原创 2019-04-19 21:25:35 · 299 阅读 · 1 评论 -
【算法竞赛进阶指南】POJ3764 The XOR Longest Path —— Trie
Description给定一个树,树上的边都具有权值。树中一条路径的异或长度被定义为路径上所有边的权值的异或和:⊕ 为异或符号.给定上述的具有n个节点的树,你能找到异或长度最大的路径吗?Input第一行包含整数n,表示树的节点数目。接下来n-1行,每行包括三个整数u,v,w,表示节点u和节点v之间有一条边权重为w。数据规模:1 ≤ n ≤ 100000,0 ≤ u,v <...原创 2019-04-19 21:06:49 · 259 阅读 · 0 评论 -
【算法竞赛进阶指南】CH1602 The XOR Largest Pair —— Trie
Description在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?Input第一行输入一个整数N。第二行输入N个整数A1~AN。数据范围:1 ≤ N ≤ 10^5 ,0 ≤ Ai < 2^31Output输出一个整数表示答案。Sample Input31 2 3Sample Output3异或运算 相同得0,不...原创 2019-04-19 20:11:34 · 262 阅读 · 0 评论 -
【算法竞赛进阶指南】前缀统计 Trie
Description给定N个字符串S1,S2…SN,接下来进行M次询问,每次询问给定一个字符串T,求S1~SN中有多少个字符串是T的前缀。输入字符串的总长度不超过106,仅包含小写字母。字符串 S1(不妨假设长度为 n)被称为字符串 S2 的前缀,当且仅当:S2 的长度不小于 n,且 S1 与 S2 前 n 个字符组组成的字符串完全相同。Input第一行两个整数N,M。接下来N行每行一个...原创 2019-04-19 18:07:14 · 378 阅读 · 0 评论 -
【算法竞赛进阶指南】荷马史诗 K叉Huffman树
Description追逐影子的人,自己就是影子。 ——荷马达达最近迷上了文学。她喜欢在一个慵懒的午后,细细地品上一杯卡布奇诺,静静地阅读她爱不释手的《荷马史诗》。但是由《奥德赛》和《伊利亚特》组成的鸿篇巨制《荷马史诗》实在是太长了,达达想通过一种编码方式使得它变得短一些。一部《荷马史诗》中有 n 种不同的单词,从 1 到 n 进行编号,其中第 i 种单词出现的总次数为 wi。达达想...原创 2019-04-19 17:11:57 · 323 阅读 · 0 评论 -
【算法竞赛进阶指南】POJ 2823 Sliding Window 单调队列
DescriptionAn array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the windo...原创 2019-04-19 14:53:02 · 252 阅读 · 0 评论 -
【算法竞赛进阶指南】POJ 3974 —— Palindrome 字符串哈希
Description如果一个字符串正着读和倒着读是一样的,则称它是回文的。给定一个长度为N的字符串S,求他的最长回文子串的长度是多少。Input输入将包含最多30个测试用例,每个测试用例占一行,以最多1000000个小写字符的形式给出。输入以一个以字符串“END”(不包括引号)开头的行表示输入终止。Output对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例...原创 2019-04-19 13:48:55 · 351 阅读 · 0 评论 -
【算法竞赛进阶指南】CH4301 Can you answer on these queries III 区间最大连续子段和 线段树
Description给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“1 x y”,查询区间 [x,y] 中的最大连续子段和。2、“2 x y”,把 A[x] 改成 y。对于每个查询指令,输出一个整数表示答案。Input第一行两个整数N,M。第二行N个整数A[i]。接下来M行每行3个整数k,x,y,k=1表示查询(此时如果x>y,请交换x,y),k=2表示...原创 2019-04-18 22:33:53 · 344 阅读 · 0 评论 -
【算法竞赛进阶指南】兔子与兔子
Description很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母),然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。Input第一行一个 ...原创 2019-04-18 16:34:15 · 498 阅读 · 0 评论 -
【算法竞赛进阶指南】POJ 3349 —— SnowflakeSnowSnowflakes
Description有N片雪花,每片雪花由六个角组成,每个角都有长度。第i片雪花六个角的长度从某个角开始顺时针依次记为ai1,ai2,…,ai6。因为雪花的形状是封闭的环形,所以从任何一个角开始顺时针或逆时针往后记录长度,得到的六元组都代表形状相同的雪花。例如ai1,ai2,…,ai6和ai2,ai3,…,ai6,ai1就是形状相同的雪花。ai1,ai2,…,ai6和ai6,ai5,…,...原创 2019-04-18 09:56:41 · 798 阅读 · 0 评论 -
【算法竞赛进阶指南】最佳牛围栏 POJ 2018 Best Cow Fences
DescriptionFarmer John’s farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <= 2000.FJ wants to build a fence around a c...原创 2019-04-11 23:19:11 · 401 阅读 · 0 评论 -
【算法竞赛进阶指南】 POJ 3784 —— Running Median
DescriptionFor this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements receiv...原创 2019-04-09 16:34:46 · 202 阅读 · 0 评论 -
欧式素数筛法
本文学习自《算法竞赛进阶指南》0x30回顾Eratosthenes筛法,时间复杂度O(NloglogN)O(NloglogN)O(NloglogN):每次扫描一个数,把这个数的倍数标记为合数(非素数)。对于 例如2和3都会把6标记为合数的情况,有:小于x2x^2x2的xxx的倍数在扫描更小的数时都会已经被标记为合数。因此,对于每个数x,我们只需要从x2x^2x2开始,把x2,(x+1)...原创 2019-04-05 16:32:20 · 3389 阅读 · 0 评论 -
【算法竞赛进阶指南】货仓选址
题目描述在一条数轴上有 N 家商店,它们的坐标分别为 A1~AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1~AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤1000001≤N≤1000001≤N≤100000输入...原创 2019-01-28 18:43:44 · 1225 阅读 · 0 评论 -
【算法竞赛进阶指南】CF670C —— Cinema
题目描述莫斯科正在举办一个大型国际会议,有n个来自不同国家的科学家参会。每个科学家都只懂得一种语言。为了方便起见,我们把世界上的所有语言用1到10910^9109之间的整数编号。在会议结束后,所有的科学家决定一起去看场电影放松一下。他们去的电影院里一共有m部电影正在上映,每部电影的语音和字幕都采用不同的语言。对于观影的科学家来说,如果能听懂电影的语音,他就会很开心;如果能看懂字幕,他就...原创 2019-01-28 18:19:59 · 1123 阅读 · 2 评论 -
【算法竞赛进阶指南】最高的牛
题目描述有 N 头牛站成一行,被编队为1、2、3…N,每头牛的身高都为整数。当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。现在,我们只知道其中最高的牛是第 P 头,它的身高是 H ,剩余牛的身高未知。但是,我们还知道这群牛之中存在着 M 对关系,每对关系都指明了某两头牛 A 和 B 可以相互看见。求每头牛的身高的最大可能值是多少。输入格式第一行输入整数N,P,H,M,数...原创 2019-01-21 19:01:53 · 3171 阅读 · 0 评论 -
【算法竞赛进阶指南】Inc序列
描述给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。输入格式第一行输入正整数n。接下来n行,每行输入一个整数,第i+1行的整数代表ai。输出格式第一行输出最少操作次数。第二行输出最终能得到多少种结果。...原创 2019-01-21 15:41:01 · 955 阅读 · 1 评论 -
【算法竞赛进阶指南】激光炸弹 —— 二维前缀和
一种新型的激光炸弹,可以摧毁一个边长为 R 的正方形内的所有的目标。现在地图上有 N 个目标,用整数Xi,Yi表示目标在地图上的位置,每个目标都有一个价值Wi。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个边长为 R 的正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标不会被摧毁。求一颗炸弹最多能炸掉地图上总价值为多少的目标。输入格式第一行输入正整...原创 2019-01-21 11:15:05 · 343 阅读 · 0 评论 -
【算法竞赛进阶指南】费解的开关
题目描述你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字“1”表示一盏开着的灯,用数字“0”表示关着的灯。下面这种状态1011101101101111000011011在改变了最左上角的灯的状态后将变...原创 2019-01-19 19:29:04 · 940 阅读 · 0 评论 -
【算法竞赛进阶指南】递归实现排列型枚举
把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤9输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1排列型应该是最简...原创 2019-01-18 14:57:42 · 814 阅读 · 0 评论 -
【算法竞赛进阶指南】递归实现组合型枚举
从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。数据范围n&amp;amp;gt;0 ,0≤m≤n ,n+(n...原创 2019-01-18 14:56:27 · 483 阅读 · 0 评论 -
【算法竞赛进阶指南】递归实现指数型枚举
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3所有方...原创 2019-01-18 13:56:38 · 673 阅读 · 0 评论 -
【算法竞赛进阶指南】 Hamilton路径 —— 状态压缩DP
题目描述给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入第一行一个整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(一个不超过10^7的正整数,记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]...原创 2018-09-22 14:16:30 · 472 阅读 · 0 评论 -
【算法竞赛进阶指南】 a^b,64位整数乘法 —— 快速幂
求a的b次方对p取模的值,其中 1 ≤ a,b,p ≤ 10910^9109快速幂的入门题,什么是快速幂呢? 就是快速的幂运算。快速幂之所以快 是因为使用了二进制与位运算加速计算的方法。比如计算a11(=a1⋅a2⋅a8)a^{11} (= a^1 \cdot a^2 \cdot a^8)a11(=a1⋅a2⋅a8)为啥写成1 2 8 不写成2 2 7呢?因为11的二进制为1011而...原创 2018-09-21 23:45:13 · 659 阅读 · 0 评论