![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDU题解
曾英俊
这个作者很懒,什么都没留下…
展开
-
2018中国大学生程序设计竞赛 - 网络选拔赛--HDU 6438 Buy and Resell(贪心)
题意:有 n 个城市,每个城市可以买一个价值为 ai 的东西或者卖一个价值为 ai 的东西,假设你一开始有无数的钱,问你经过这些城市最多可以赚多少利润。题解:有利润就要当前的值大于你买进去的值,比如第一个样例:(10-2,9-1) 和 (10-1,9-2)是一样的。如果我们只是这样去求答案是不对的,因为在第一个样例中 2 是大于 1的,这样就很亏,但是我们可以发现先 2-1 再10...原创 2018-08-31 23:07:13 · 181 阅读 · 0 评论 -
2018 Multi-University Training Contest 4--HDU 6333 Problem B. Harvest of Apples(数论+莫队)
题意:给你n,m,让你求出从0到m组合数C(n,m)的和。题解:比赛的时候用了好多求组合数的模板,优化了好久,tle到自闭。。。首先我们要利用预处理阶乘逆元:ll getpow(ll a, int b){ ll sum = 1; while(b){ if(b & 1){ sum = (sum * a) % mod; } a = (a*a) % m...原创 2018-08-02 10:47:35 · 143 阅读 · 0 评论 -
2018 Multi-University Training Contest 3--HDU 6319 Problem A. Ascending Rating(单调队列)
题意:输入长度为k的序列,通过递推式给出k+1~n的序列,然后计算1~n-m+1的(maxratingi XOR i)的总和和(count XOR 1)的总和。(maxratingi 是[i, i+m-1]区间的最大值,count 是[1, i+m-1]区间的上升序列个数)题解:通过单调队列(大到小)从前往后走,到 i >=m 时,更新max[i-m+1]的最大值就是单调队列...原创 2018-07-31 13:54:51 · 145 阅读 · 0 评论 -
2018 Multi-University Training Contest 2--HDU 6318 Swaps and Inversions(数论+思维)
题意:给你一个大小为n的数组,求出其逆序数与x相乘最小,可以交换相邻数字,交换一次代价为y求最小花费。题解:计算逆序数不难发现每次跟换数字都会减一,利用这个,我们可以知道 (a-b)*x+b*y (a为逆序数,b为交换次数),其实最小值就是a*min(x*y).我使用了树状数组来计算逆序数,因为数字区间在【-1e9,1e9】,所以要进行离散化处理,如:999 -54 36 ==...原创 2018-07-26 15:50:05 · 113 阅读 · 0 评论 -
2018 Multi-University Training Contest 2--HDU 6313 Hack It(思维)
题意:打印一个n*n的矩阵,里面只有1和0,里面的1不可以四角构成一个矩形。题解:根据杜神的指导,可以知道这种构建方法: 1000000 1000000 1000000 1000000 1000000 1000000 1000000 0 +0 0 +0 0 +0 0 +0 0 +0 0 +0 0 1000000 0100000 001000...原创 2018-07-26 11:48:13 · 176 阅读 · 0 评论 -
2018 Multi-University Training Contest 2--HDU 6315 Naive Operations(线段树)
题意:有一个a[1--n]和b[1--n]的数组,a初始化为0,b初始化如第二行输入,接下来有m个操作;操作类型如下:“add l r” -- a数组在[ l , r ]区间全部加1;“query l r” -- 计算在[ l , r ]区间所有ai/bi的和。题解:线段树模板ai/bi可以看作ai是bi的倍数,那么我们可以设一个值为bi,维护的时候把它减一,如果值为0...原创 2018-07-26 10:25:21 · 124 阅读 · 0 评论 -
2018 Multi-University Training Contest 1--HDU 6299 Balanced Sequence(思维)
题意:给n个只有括号字符串通过排序让他是的正规括号如()或(())最多的子字符串长度。题解:对字符串进行排序,排序规则如下:)))))((--左少右多--a 类型))(((((--左多右少--b 类型如果 a 与 a 比较: 按照右括号从多到少排序;如果 b 与 b 比较: 按照左括号从少到多排序;如果 a 与 b 比较: ...原创 2018-07-24 15:39:58 · 150 阅读 · 0 评论 -
2018 Multi-University Training Contest 1--HDU 6301 Distinct Values(贪心)
题意:要求给出有n个数字的数组,有m个数组要求区间各数字不同,并且按字典排序最小;如第三个样例:1 2 3 1 11到3里的数字都是不一样的;2到4里的数字都是不一样的。题解:利用贪心把所有的(l,r)按照先排 l ,再排 r 排序,用优先队列存可以用的数字,因为前面一段是已经排好,我们就可以利用前面的没被覆盖在现在的(l,r)的数字,以此类推。代码:...原创 2018-07-24 09:46:42 · 151 阅读 · 0 评论 -
HDU 6219 Empty Convex Polygons(最大空凸包)
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <string>#include <vector>#include原创 2018-10-01 16:16:50 · 338 阅读 · 0 评论 -
HDU 5137 How Many Maos Does the Guanxi Worth(最短路+枚举)
题解:首先先跑一遍最短路,用pre数组记录最短路路径,枚举路径上的所有点(不包括 1 和 n),标记这些点再来跑最短路记录其中最大的最短路。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <c...原创 2018-10-04 10:31:48 · 172 阅读 · 0 评论 -
HDU 5135 Little Zu Chongzhi's Triangles(贪心)
题解:贪心从大到小排序加遍历,三个一起遍历从大到小,如果满足三角形条件都可以加上答案。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <s...原创 2018-10-04 10:41:05 · 136 阅读 · 1 评论 -
HDU 4811 Ball(思维)
题解:先放头和尾依次左右开始塞满,找规律。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <string>#include ...原创 2018-10-06 12:01:51 · 149 阅读 · 0 评论 -
HDU 4803 Poor Warehouse Keeper(贪心+精度)
题解:先求出最后的单价,我们每一步都于逼近单价。因为只有总价部分可以优化成加一个整数,所以每一步去就加上目标总价与当前总价差多少即可。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cs...原创 2018-10-06 15:56:32 · 174 阅读 · 0 评论 -
HDU 1520 Anniversary party(树形dp)
题解:根据题意可以知道每个点都有可取可不取,所以我们设 dp[i][j] (i 表示第 i 个点,j:0/1 表示取这个人或者不取)。可以推得公式:dp[u][0] += max(dp[v][1], dp[v][0]) ,dp[u][1] += dp[v][0]。然后跑从度为 0 的点跑dfs即可。#include <algorithm>#include &l...原创 2018-10-07 15:01:29 · 146 阅读 · 0 评论 -
HDU 4714 Tree2cycle(树形dp)
题解:根据题目,我们可以知道只要求不是根的点所连点子链个数-1再加上根所连的子链个数-2为删条的条数,就是可以这个树可以分成多少条链,所删条数*2+1就是答案了。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#inclu...原创 2018-10-07 16:27:11 · 156 阅读 · 0 评论 -
HDU 3853 LOOPS(概率dp)
题解:由题可以得:(x,y)到(x,y+1)的概率是 p[x][y][1],到(x+1,y)的概率是 p[x][y][2],不动的概率是 p[x][y][0]。所以可以推出下面的公式:dp[i][j] = dp[i][j+1]*p[i][j][1] + dp[i+1][j]*p[i][j][2] + dp[i][j]*p[i][j][0] + 2。即:dp[i][j] = (dp[i][j...原创 2018-10-10 16:17:26 · 163 阅读 · 0 评论 -
HDU 6470 Count(矩阵快速幂)
题意:第一头牛和第二头牛的号码为 1 和 2,其余的牛的号码需要通过公式求得:f(n) = f(n - 1) + 2 * f(n - 2) + n * n * n , (f(1) = 1,f(2) = 2,分别是第一头和第二头)。题解:与前几项有关的加法公式一般都是用矩阵快速幂来解的。。。所以解法就是矩阵快速幂。很明显,右矩阵肯定与 f(n - 1)、f(n - 2) 和 n ...原创 2019-03-17 17:00:42 · 284 阅读 · 0 评论 -
2018 Multi-University Training Contest 4--HDU 6336 Problem E. Matrix from Arrays(思维)
题意:给你一个n,然后输入a[n]数组,按照题目构建一个矩阵,有q个查询,每一个查询有x0,y0,x1,y1,求该矩阵区间的和。题解:打表可以发现矩阵是由长度2*n(奇数是n)的小矩阵构成。由图得:ans = S(x1,y1) - S(x0-1,y1) - S(x1,y0-1) + S(x0,y0)。设小矩阵的和为 S, 小矩阵的每一行的和为Si,小矩阵的每一列的和为Sj:...原创 2018-08-02 16:22:45 · 153 阅读 · 0 评论 -
2018 Multi-University Training Contest 5--HDU 6351 Beautiful Now(暴力枚举)
题意:给你一个数字n(1<=n<=1e9),通过k次交换其中的数字使其达到最小和最大。题解:如果从第一个就开始往后面排序,最小步骤达到最小是 n的位数-1 ,所以我们可以让 k >= n的位数-1 情况都输出排序后的最小,最大值。如果小于,从前往后贪心贪大值换小值是不可以的,如:425111 3 ==> 111425。所以我们可以通过暴力枚举所有排序,最...原创 2018-08-07 09:57:33 · 231 阅读 · 0 评论 -
2018 Multi-University Training Contest 5--HDU 6356 Glad You Came(线段树)
题意:给你一个函数,用它求出长度为3*m的数组,a数组一开始全为0,有m个操作:l, r, v都可以用公式算出来,[l, r]区间内把所有小于v的a[i]替换成v。求出 [1,n]区间内的所有 (i*a[i]) 的异或和。题解:利用线段树记录区间的最大值和最小值,每次修改和查询维护一下。如果最大值小于v就往下更新剪枝:如果区间内的最小值大于v就不用走了,直接回去。最后求出异或和...原创 2018-08-07 15:46:38 · 120 阅读 · 0 评论 -
2018中国大学生程序设计竞赛 - 网络选拔赛--HDU 6446 Tree and Permutation(思维)
题意:有 n 个点标为 1 ... n,对其全排列,按排列后顺序走,求其路径总和。题解:通过对样例全排列发现答案就是边的使用次数乘上权值的求和。如果我们考虑一个边,除去这个边的两点,对其 n-1 个点全排列(把边想象成一个点),正反 2 次,所以就有 (n-1)!*2 的方法数,再乘上权值和边的两边数量。#include <algorithm>#include ...原创 2018-09-01 00:04:46 · 137 阅读 · 0 评论 -
2018中国大学生程序设计竞赛 - 网络选拔赛--HDU 6447 YJJ's Salesman(dp+线段树)
题意:一个人要从(0,0)的村庄走到(1e9,1e9)的村庄,有些村庄有 w 值。他只能斜着走才能获得那些值,问你他最多可以获得多少值。题解:如题我们可以得到 dp 公式 :dp[i][j] = max(dp[i-1][j-1]+w, dp[i-1][j], dp[i][j-1], w)。但是我们直接离散化后去跑整个图是不行的,因为图太大了。其实我们可以发现 dp[i][j] = ...原创 2018-09-05 23:11:19 · 192 阅读 · 0 评论 -
HDU 6228 Tree(思维)
题解:我们只要知道一条边的左右点数都大于 k 则说明这一条边是可以走的。我们通过对度为0的点放进队列中,一层一层加点去度就可以做到每一个点前面所承载的点数(包括自己)。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#...原创 2018-09-30 21:51:22 · 228 阅读 · 0 评论 -
HDU 6223 Infinite Fraction Path(bfs+剪枝)
题解:对前部有相同数值进行bfs,就相当于一起走。剪枝:1.如果下一步是你已经走过,并且比现在的步数要高则可以去掉;2.如果数值小于当前这步最大值也可以去掉;3.把状态按照步数小,数值大排序可以节省时间。#include <algorithm>#include <iostream>#include <cstdlib>#inc...原创 2018-10-01 01:01:02 · 196 阅读 · 0 评论 -
HDU 6229 Wandering Robots(思维)
题解:假设所有的点都没有障碍,则设分子 a = 3*3+(n-2)*2*4+(n-2)*(n-1)/2*5,分母 b = 3*4+(n-2)*4*4+(n-2)*(n-2)*5。在(x,y)上加入障碍,则总和的分母要减去当前的点即 b -= v(x,y),如果这个点是 x+y >= n-1,则 a-= v(x,y)。然后在遍历障碍可以走的路,如果下一步还是障碍则不走,否则 b--...原创 2018-10-01 09:55:55 · 220 阅读 · 0 评论 -
2018 Multi-University Training Contest 10--HDU 6437 Problem L.Videos(最大费用最大流)
题意:有 k 个人看 m 个视频,一天有 n 个小时,每个视频只能一个人看,看完一个视频那个人会获得 W 快乐值,视频有自己的限制种类,视频种类相同一起看会扣 w 快乐值。问一天这群人最多可以获得多少快乐值。题解:我们可以想象 k 个人就是 k 流量,把一个视频想象成一个边,构成一个有源点和汇点,这样就可以跑最大费用最大流(把费用取负跑最小费用)。AC代码#include &...原创 2018-08-23 16:55:43 · 183 阅读 · 0 评论 -
2018 Multi-University Training Contest 10--HDU 6435 Problem J. CSGO(状态压缩+暴力)
题意:有 n 个主武器和 m 个副武器,每个武器都有是 s 价值和 x[i] (i = 1...k)属性,通过公式求出一种主武器和副武器组合的最大值。公式:题解:abs(x[i]-x[j]) = x[i]-x[j] 或者 x[j]-x[i] 那么我们可以发现 x[i] 只有两种情况,即 x[i] 和 -x[i]。最多有五个属性,那么组合数只有2^k,我以我们可以通过二进制来遍历所有...原创 2018-08-23 11:03:59 · 160 阅读 · 0 评论 -
2018 Multi-University Training Contest 9--HDU 6424 Rikka with Time Complexity(数论)
题意:通过题目给的函数计算出 g(A)/g(B) 的极限,如果极限为0就输出-1,否则输出1。题解:因为函数是指数的类型,我们就可以通过对函数用 log 化简,最大有 3,所以要化简2次就得到了 f(A1+2)+f(A2+1)*f(A3) 和f(B1+2)+f(B2+1)*f(B3),这种 a+b 和 c+d 比较大小可以先比较 max(a, b) 与 max(c, d),如果相等就比...原创 2018-08-21 16:58:42 · 204 阅读 · 3 评论 -
2018 Multi-University Training Contest 9--HDU 6415 Rikka with Nash Equilibrium(数论+思维)
题意:有一种由[1, n*m]不重复填充的矩阵,并且只有一个点在行和列上是最大的。求这种 n*m 矩阵有多少种。题解:最大值一定是 n*m,我们可以把他放在任意格子,但是我们可以发现,无论放在哪里他的矩阵都可以变形会最大值在(1,1)的情况。9 8 7 6 5 4 3 2 1 1 3 2 7 9 ...原创 2018-08-21 11:29:19 · 201 阅读 · 0 评论 -
2018 Multi-University Training Contest 8--HDU 6400 Parentheses Matrix(思维)
题意:比如:()()()(),(((())))这种叫做合法括号序列,在行或者列上都可以。让你生成一个 n 行 m 列尽可能多合法括号序列的矩阵。题解:合法括号序列的长度一定是偶数,所以可以分成4种:1,n 为奇数 m 为奇数因为不可能有合法括号序列,所以全填 '(';2,n 为奇数 m 为偶数在列上是奇数不可能有合法括号序列,但是在行上就可以,如:()()()()(...原创 2018-08-16 16:16:44 · 151 阅读 · 0 评论 -
2018 Multi-University Training Contest 8--HDU 6406 Taotao Picks Apples(线段树+前缀和)
题意:给你一个长度为 n 的数组,有 m 次操作:第 p 个数为 q,求现在这个数组的最长递增子序列长度(从第一个开始,算出答案后第 p 个数要回到原来的值)。题解:如果我们要修改第 p 个数,要考虑区间[1, p-1]里的最长递增子序列长度 d1[index](index 是其最大值的下表) 和最大值 num[index] , 如果 q 大于 num[index] 则要答案就要加一,...原创 2018-08-16 14:24:29 · 246 阅读 · 0 评论 -
2018 Multi-University Training Contest 8--HDU 6397 Character Encoding(数论)
题意:假设有 0 到 n-1种数字,随机选取(可以重复),得到的和为k组合数量有多少种。题解:设想一个 n 为3的情况:m\k 0 1 2 3 4 5 6 7 8 1 1 1 1 0 0 0 0 0 0 2 1 2 3 2 1 0...原创 2018-08-15 18:08:10 · 233 阅读 · 0 评论 -
2018 Multi-University Training Contest 7--HDU 6396 Swordsman(优先队列+思维)
题意:有n个怪物,每只怪物都有(有k种防御属性,分别为 ai,1......ai,k),你是主人公,有k种攻击属性 v(1......k)。当 v[i] >= a[id][i] ,i ∈ [1, k] 时,该怪物可以被杀死,你的攻击属性可以增加 b[id][i],即 v[i] += b[id][i]。问最多可以杀多少怪物,并且输出最后你的攻击属性。题解:我们可以通过优先队...原创 2018-08-14 15:43:49 · 164 阅读 · 0 评论 -
2018 Multi-University Training Contest 7--HDU 6395 Sequence(矩阵快速幂+分块)
题意:给出一个公式,让你求出第n个数值是多少。题解:看到公式第一个就想起了矩阵乘法,因为很像斐波那契数列(可以用矩阵乘法得到),但是后面有个尾巴,所以要把尾巴考虑进去。推出公式如下:这样我们只考虑左矩阵的次方,再乘上右矩阵就是我们要找到答案,可以用矩阵快速幂来缩短这段时间。struct matrix{ ll a[3][3]; matrix(){ mem(a...原创 2018-08-14 11:11:34 · 129 阅读 · 0 评论 -
2018 Multi-University Training Contest 6--HDU 6370 Werewolf(dfs+并查集)
题意:两种角色:狼和村民;狼的话可真可假,村民的话一定为真。找出铁狼和人的数量。题解:因为狼会说谎,所以人的个数是无法确定的。又因为人是说真话,如果他说A是狼,则A一定是狼。那么我们就可以得到:A说B是人,B说C是人,C说B是狼,这样我们就可以知道B和A一定是狼,因为如果C是狼则全都没有意义,所以C不是狼,那么他说了真话,则B是狼,这时候A说了假话,那他也一定是狼。#in...原创 2018-08-09 11:33:03 · 178 阅读 · 0 评论 -
2018 Multi-University Training Contest 6--HDU 6373 Pinball(数论)
题意:求出小球在斜面反弹几次。题解:通过对速度的直角坐标系分解,我们可以知道沿着斜面方向的初速度为 v0 = sqrt(2*g*H) * Sin(a) (2gH = v0*v0 - 0*0),然后对重力进行分解可以得到沿着斜面方向的力及可以得到其方向的加速度 a = g * Sin(a)。对于垂直斜面方向的速度,一直处于上升和下降,每次下降都会碰到一次,把小球对斜面的力看作这个垂直...原创 2018-08-09 10:09:20 · 129 阅读 · 0 评论 -
HDU 6468 zyb的面试(模拟)
题意:将一个从 1 到 n 的数组进行字典序排序,输出第k 个数字。题解:直接模拟字典序增加,注意范围,不会超时(范围较小)。AC代码:#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include ...原创 2019-03-18 18:38:16 · 179 阅读 · 0 评论