2018 Multi-University, HDU Day 8

From EOJ Wiki
Revision as of 12:22, 15 August 2018 by Kblack (talk | contribs) (→‎Problem J)
Jump to navigation Jump to search

Problem A

Solved by zerol. 00:41 (+1)

题意:求 $\sum_{i=1}^m x_i = k$ ($0 \le x_i < n$) 的整数解的组数。

Problem B

Solved by kblack. 03:10 (+2)

题意:给定三角形和矩形的宽度,求矩形的最小高度,使得矩形能装下三角形。

题解:分两种情况,卡住和没卡住,没卡住的情况要求某条边与垂直,求三角形的高就好了(注意判断整个的宽度),卡住的情况,显然可以至少卡住两个点,枚举一下,然后算一算就好了。可以通过无脑点积减少不必要的分类讨论。

Problem C

Problem D

Solved by zerol. 01:23 (+1)

题意:构造一个 $h \times w$ 的括号矩阵,使得匹配的行数、列数之和最大。

Problem E

Solved by zerol. 00:14 (+)

给一个 $3 \times 3$ 的数阵,每次旋转一个 $2 \times 2$ 的子阵,求最终结果。

Problem F

Unsolved.

题意:求在面对换、面翻转操作下本质不同的大小为 $m \times n \times p$ 的三维 01 数组的个数。

Problem G

Unsolved.

题意:给定 $n$ 张卡片,每张卡片正反面各有一个数。问至少要翻转多少张卡片,才能使正面向上的数互不相同,并求方案数。

Problem H

Problem I

Solved by zerol. 03:37 (+1)

题意:给定若干个字符串,每个字符串有一个快乐值。随机选取一个长度不超过 $q$ 的串,问是给定字符串中父串的快乐值的乘积的期望。

Problem J

Solved by kblack. 00:33 (+1)

题意:给一个序列,每次贪心选取比前一个数大的数。每次询问修改一个数,求修改后的序列的能选出多少个数。询问不叠加。

题解:将询问挂在修改的位置上,先正着跑一遍看看每个点实际的开头是修改后的数字还是之前的最大值,并得到答案的前面部分,然后从后往前跑一遍单调栈,每到有修改的位置,在单调栈上二分即可得到后面部分。

Problem K

Solved by ultmaster. 04:56 (+4)

题意:给定一个气球矩阵,扎掉一个气球后,同行同列的气球都消失。问对于每个 $1 \le x \le k$,扎恰好 $x$ 次能够清除所有气球的方案数。

题解:$f(i,state)$:前 $i$ 行,状态每一维上有 0 1 2,0 表示该行没填过,1 表示该行已填过不能再填,2 表示该行以后必须得填)。只有在该行没填东西,又有某些列没有被覆盖的时候,才会产生 2,所以状态总数是 $n \times 3^m$,转移代价是 $m$。所以总复杂度是 $O(nm 3^m)$。

注意两个事情:一、时限较紧,注意常数优化(包括但不限于跳过 $f(i,j)=0$ 的那些状态的转移,或者评测机抖动需要多交两次)。二、计算过程不会,但答案要乘以 $m!$ 会爆 LL,需要 int128。

Problem L

Upsolved by kblack. (-5)

题意:告诉你工厂每个月的原料价格,客户需求,产能,生产成本,原料和产品的仓储成本,产品的仓库容量限制,求满足客户需求前提下的最小成本。

题解:搞了个烦得一批的线段树,结果贪心就好了,每天假装完全生产,然后用掉最便宜的,存不下的话,最贵的就当他无事发生。