2021年寒假热身赛 5
踏莎行·候馆梅残
[宋]欧阳修
候馆梅残,溪桥柳细。
草薰风暖摇征辔。
离愁渐远渐无穷,迢迢不断如春水。寸寸柔肠,盈盈粉泪。
楼高莫近危阑倚。
平芜尽处是春山,行人更在春山外。
# 未完成,简单说说思路
A. 进位制变换
由于数字最多1000位,并且可能是36进制,所以要自己编写运算。用字符串表示数字,实现字符串与数字的整除与取模运算即可。
B. 乘积为整数
小数点后可能有9位,那么两个小数点后都是9位的数字相乘则精度会超过double允许的类型,所以可以将小数转化为分数 .
因为从小数化为分数,分数的分母都是从\( 10^L \)开始,并可能被约分,最后分母只剩\(2^a5^b\)的形式,也就是说如果要将一个数字的分母\( 2^a⋅5^b\)约去,只需要看这个数字的分子与另一个数字的分子之积是否含有\(2^a⋅5^b\)的因子,其它的因子都不会有影响 。
这样,在本题中,我们将每个数字用\( (a,b) \) 描述,对应于\( 2^a⋅5^b\)。若两数相乘为整数,则两数 \(2^a⋅5^b\) 与 \(2^c⋅5^d\)的乘积是 \(2^{a+c}⋅5^{b+d}\),即\( (a+c,b+d) \) ,若有\( a+c≥0 \) and \( b+d≥0\) ,则两数之积为整数。
C. 蛤蟆吐球消消乐
按题意说的做就行。本题进行插入和删除操作,就可以利用C++ STL的vector实现。
D. 楼高莫近危阑倚
先DFS找到树根(唯一没有父结点的那个)。然后维护一个树状数组,或者线段树,则在\( O(N \log(N)) \)的时间内解决。
E. TA也超级加倍?
\( \lceil \frac{N}{2^a3^b5^c} \rceil \) 和 \( \lfloor \frac{N}{2^a3^b5^c} \rfloor \)
F. 上下文无关文法
动态规划