2018 Multi-University Training Contest 1
2018 Multi-University Training Contest 1
A - Maximum Multiple
题目描述:给定一个\(n\),找到三个正整数\(x, y, z\),满足\(n=x+y+z, x|n, y|n, z|n\),求\(xyz\)最大值
solution
这道题竟然卡住了。。。
不妨设\(x \leq y \leq z\),则\(z \geq \frac{n}{3}\),所以\(z=\frac{n}{2}, \frac{n}{3}\),假如\(z=\frac{n}{3}\),则\(x=y=z=\frac{n}{3}\)为这种情况的最优解,假如\(z=\frac{n}{2}\), 则\(y \geq \frac{n}{4}\),若\(y=\frac{n}{3}\),则\(x=\frac{n}{6}\), 不够三个都为\(\frac{n}{3}\)时优(因为\(y\)能取\(\frac{n}{3}\),说明\(n\)为\(3\)的倍数,因此也能取三个都为\(\frac{n}{3}\)),若\(y=\frac{n}{4}\),则\(x=\frac{n}{4}\)。
综上所述,只有三种情况:1、\(n=\frac{n}{3}+\frac{n}{3}+\frac{n}{3}\) 2、\(n=\frac{n}{2}+\frac{n}{4}+\frac{n}{4}\) 3、无解
时间复杂度:\(O(1)\)
B - Balanced Sequence
题目描述:给定\(n\)个括号序列,求出按一定顺序排列后,连起来的括号序列的最长合法子序列(不是子串)。
solution
首先每个括号序列的合法子序列可以先加入答案,然后每个序列就会变成若干个')'接着若干个'(',记')'个数为\(a_i\),'('个数为\(b_i\),然后按照一定规则排序。
若\(a_i<b_i, a_j \geq b_j\),则\(i\)排在\(j\)的前面
若\(a_i \geq b_i, a_j<b_j\),则\(j\)排在\(i\)的前面
若\(a_i<b_i, a_j < b_j\),则\(a\)比较小的排前面
若\(a_i \geq b_i, a_j \geq b_j\),则\(b\)比较大的排前面
最后排完序拼起来算一次答案即可。
时间复杂度:\(O(n)\)
C - Triangle Partition
题目描述:给定平面上\(3n\)个点(任意三个点不在一条直线上),求出一种分成\(n\)个不相交的三角形的方案。
solution
按极角排序后的顺序依次构三角形即可。
时间复杂度:\(O(nlogn)\)
D - Distinct Values
题目描述:构造一个长度为\(n\)的序列,满足对于给定的\(m\)个区间,任意一个区间里的数字两两不同,求字典序最小的序列。
solution
将区间按左端点从小到大排序,左端点相同的只保留右端点最大的。
一开始整个序列都为\(1\),记录当前填完\(R\)之前的数,用\(set\)记录当前可用的数字,做到第\(i\)个区间时,把前一个区间的左端点到\(min(R,i区间左端点-1)\)的数字放回\(set\)里面,然后贪心地填\(max(R+1, i区间左端点)\)到\(i\)区间右端点,填一个在\(set\)里删一个,更新\(R\)。
时间复杂度:\(O(nlogn)\)
G - Chiaki Sequence Revisited
题目描述:求
的前\(n\)项和
solution
除了\(1\)出现了两次之外,其它数字\(x\)出现的次数为\(d, x=2^{d}y\),所以可以二分出最后一个数字是多少,然后求和就好了。
时间复杂度:\(O(logn)\)
H - RMQ Similar Sequence
题目描述:给定一个长度为\(n\)的序列\(A\),构造出它的笛卡尔树,然后有一个长度为\(n\)的\(B\)序列,\(B\)序列的每一位数服从\([0, 1]\)实数均匀分布,构造它的笛卡尔树,若两者相同,则该\(B\)序列的权值为所有数的和,否则为\(0\),求权值的期望。
solution
答案为\(\frac{n}{2} \frac{A的拓扑序列个数}{n!}\),后面\(A\)的拓扑序列个数有公式算:\(\frac{n!}{\prod size_i}\),当时我是按儿子要小于父亲,用积分算出\(B\)序列的概率,而出现的概率就等于\(\frac{A的拓扑序列个数}{n!}\)
时间复杂度:\(O(n)\)
I - Lyndon Substring
题目描述:给定\(n\)个字符串,有\(m\)个询问,每次询问两个字符串连起来后的最长\(Lyndon word\)子串的长度。
solution
题解说一个字符串的最长\(Lyndon word\)子串的长度为最长\(Lyndon factorization\)(就是求一个字符串的最小循环表示的算法)后最长那个串的长度。因此问题在于如何合并两个\(Lyndon factorization\),题解说利用单调性(\(Lyndon factorization\)后是单调不上升的)用两个二分即可,但还没想出来。
K - Time Zone
题目描述:给北京时间,问某个时区的时间。
solution
模拟
时间复杂度:\(O(1)\)