A. Common Subsequence
题意:给出两个数列,求最短公共子序列。
解:最短的,长度为1,如果连1个都没有那也不可能有更长的。
B. Sequential Nim
题意:给出n堆石头,依次取,每次取一堆,取完一堆才能取下一堆,个数不限。求最终谁能赢。
解:每堆石头只有1个和多个的区别。如果轮到一个人,面前一堆只剩一个了,那他不得不取那一个,由此可见下一轮他也必然取剩下的一个,直到最后,对手将最后一堆直接取完,就输了。如果途中又遇到1,那先手可以将上一堆取完,后手还是只能取1。因此答案为序列中第一个非1的位置,轮到这里的人必胜。
C. Prefix Flip
题意:给出两个01序列a和b,每次可以选一个前缀,将其01翻转,然后将整个前缀逆置。求一个对a进行不超过2n次操作的方案,使得a与b相同。
解:方法一分钟,写了一小时还没调对,人是麻的。。。显然一次反转后第一个字符会变成最后一个。如果a的第一个字符与b的最后一个字符不同,操作后最后一位匹配;如果相同,那先反转一次长为1的前缀,再反转当前前缀,匹配成功。这样从后往前,每个字符可以通过不超过2次操作使得它们一致,符合题意。
D. Unmerge
题意:给出一个2n的排列,问这个排列有没有可能由2个长为n的序列从前往后按一次归并排序中merge的方法得到。
解:既然只有一次merge,那不可能使它全部有序。设i<j,如果ai>aj,那么它们显然原来在一个序列中。如果它们不在一个序列中,那么它们一定以有序的形式出现在最终结果中。也就是以第一个元素为首找一个上升子序列,由于是个排列,不可能出现相等的情况,子序列将原序列切分成好几段,最后跑个背包看看能不能拼出两个长为n的序列。