Google Code Jam 2020 Round 1A
Round 1A 2020
Pattern Matching
由于保证至少有一个char是*
,故可以将一个字符串划分成至少两个不含*
的子串。
- 考虑前缀:若所有前缀都是最长前缀的前缀,那么有一个合法前缀。否则答案为
*
。 - 考虑后缀:若所有后缀都是最长后缀的后缀,那么有一个合法后缀。否则答案为
*
。
之后,把所有中间的子串按照顺序拼接起来即可。
Pascal Walk
由于这题的\(N\)最大可以到\(10^9\),暴力肯定是不行的,考虑如何构造:
发现:帕斯卡三角有一个性质,即第\(k\)行的所有数之和为\(2^{k-1}\)。
因此,我们可以贪心地把\(N\)拆成若干个\(2^{k-1}\)之和,期间一直在\(1\)上面走即可。
然而它Sample Failed了……并没有找到是哪里出了问题……
找到了:“No position may be repeated within the sequence.”
Square Dance
由于每一个数至多只被删除一次,且一个数当且仅当它所在的行与列中的数都与它相同时才不会被删除。