B - Break the Chocolate
题意
有一块n*m*k
的巧克力,要求把它分成1*1*1
的小块。有两种操作。一是用手掰,每次只能把一块巧克力掰成两块;一种是用刀切,每次可以把若干块巧克力叠起来一起切。问分别采用两种方法个需要操作多少次。
思路
对于第一种用手掰的方法,先掰行,共要n-1
次。再掰列,需要n*(m-1)
次,同理掰高需要n*m*(k-1)
次。所以总共需要n-1+n*(m-1)n*m*(k-1) = n*m*k-1
次。
而对于第二种切的方法,对于行为n的巧克力我们需要切ceil(log2(n))
次就能把他切成n个行为1的巧克力。同理列和高分别是ceil(log2(m))
和ceil(log2(k))
次。然后对他们求和就行。
E - Eliminate the Conflict
H - Holiday’s Accommodation
题意
n
个人分别住在n
个城市,城市之间构成一棵树,他们打算去别的城市旅游。于是需要相互交换住所。要求所有的人都要去其他城市旅游,并且不会有两个人住在同一间房间。他们希望他们的旅程和最大,求最大的旅程和。
思路
开脑洞喽,如果你在考虑怎么安排这些人就走远了。我们需要的是旅程和,如果知道某条边有多好个人走过,就能知道旅程和。那么对于条边的两个点,各自以他们为根可以有多少个点。我们要做的就是尽可能的让更多的人走过这条边。假设左边有a
个点右边有b
个点。那么左边可以去min(a, b)
个点右边,同样右边也可以去min(a, b)
个点到左边。而剩下的点只能在该子树上走了。于是这样我盟并不需要知到哪些点去了哪里只需要知道哪些边走过了几次。
I - Isabella’s Message
题意
这题让我想到了小时候看的《小虎探险队》(好像是这样叫的)。就是Steve有一个密文,放在n*n
的矩阵里。然后你有一张n*n
的解密卡,上面有一些格子是挖空的,把解密卡重叠在密文上,挖空的格子看到的字就是密文。
现在需要你去给他解密。你并不先从那个方向开始解密。但你知道Steve知道那些单词。如果解出来的信息里的单词都是Steve能看懂idea就认为这个密文是正确的。如果存在多种这样的解,输出字典序最小的。
思路
直接模拟,四个方向的解密卡得到的串都记录下来,然后枚举开始的方向,得到解密后的文字,在判断是否存在Steve 不认识的单词。然后再所有的正确答案里找个字典序最小的。