2018多校赛题解
曾英俊
这个作者很懒,什么都没留下…
展开
-
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 · 156 阅读 · 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 · 156 阅读 · 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 · 122 阅读 · 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 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 · 249 阅读 · 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 · 154 阅读 · 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 10--HDU 6437 Problem L.Videos(最大费用最大流)
题意:有 k 个人看 m 个视频,一天有 n 个小时,每个视频只能一个人看,看完一个视频那个人会获得 W 快乐值,视频有自己的限制种类,视频种类相同一起看会扣 w 快乐值。问一天这群人最多可以获得多少快乐值。题解:我们可以想象 k 个人就是 k 流量,把一个视频想象成一个边,构成一个有源点和汇点,这样就可以跑最大费用最大流(把费用取负跑最小费用)。AC代码#include &...原创 2018-08-23 16:55:43 · 185 阅读 · 0 评论 -
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 · 203 阅读 · 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 · 234 阅读 · 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 · 169 阅读 · 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 · 145 阅读 · 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 · 155 阅读 · 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 · 125 阅读 · 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 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 · 115 阅读 · 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 · 130 阅读 · 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 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 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 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 · 206 阅读 · 3 评论