Google Code Jam 2020 Round 1A
阿新 • • 發佈:2021-06-17
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
由於每一個數至多隻被刪除一次,且一個數當且僅當它所在的行與列中的數都與它相同時才不會被刪除。