A
顺序遍历,贪心搜索。
B
模拟即可。
C
最开始想倒序贪心地搜索,但是跟顺序一样,无法确定起始元素在1和2的位置。
之后考虑分治的办法,搜索当前前缀中的最大值所在位置,如果该位置后面仍然有元素,那么这个最大值一定在2中,后面的元素一定要顺序的排在1中。但是并没有办法确定如果最大的位置在当前前缀的末端点处时,这个最大的位置应该放在0还是1。
最后枚举每一个数值大小key,将严格小于key与严格大于key的值分别放在1和2中,最后找那些与key相等的元素的位置,如果他们的位置要么在1的末尾要么在2的首部,那么就可以成功串起来。
D
贪心 & map太丑了… 而且也写不出来。
虽然晚上想到了建图,但是没有成功想出来。
Since every animal has exactly two favorite snacks, this hints that we should model the problem as a graph.
以后对于这种关系的构造要多往建图方面去考虑。
以snacks为结点,根据每头牛的喜好建图。
可以发现,对于一个n结点联通图,至多只能供给n - 1位guest。那么对于n个snacks,我们先找在连通图内的结点个数,用这个个数减去连通图的个数,就是这些snacks可以满足的guest的个数。最后再用k减去这个个数即可。