太久不练真是菜了。
Pylon
大意:在n*m的棋盘上放妻子,每次放置的位置,与上次放置的棋子不能有共同的横边,纵边,对角边。(条件苛刻但是仅与上一个棋子相关),问是否有一种方法,能把棋盘放满。
题解:对于小数据,可以想到预处理每个棋盘点的可行解空间,然后直接爆搜,稳定能过。考试时没有太细想,感觉大数据挺不好做的,一直想不到什么比较有效果的搜法,感觉是某种奇怪的构造。
然后赛后看题解,果然说是构造,但是只是其中一种方法。还有贪心和爆搜的做法,下面截了一段对爆搜解法的描述:
We can try these solutions anyway, or we can rely on our occasional friend, randomness! We can pick a random starting cell, repeatedly choose valid moves uniformly at random from the space of all allowed moves from our current cell, and, if we run out of available moves, give up and start over. For any case except for the impossible ones mentioned above, this approach finds a solution very quickly.
Many problems cannot be approached with random or brute-force solutions, but identifying the problems that can be (in Code Jam or the real world) is a useful skill!`
意思是说随机化爆搜,一开始还很是怀疑,结果我在原来的代码上shuffle了一下解空间,直接就过了…有点迷茫…
考虑过后,感觉有一定的道理,这题因为它的特殊要求,路径上每两个点之间都“没有那么近”(对于每个点而言,在3*3范围内的点都是不可行的),也就是说解空间相对来说比较离散,对于我们直接预处理数据来说,每个点的可行解顺序都是一样的,在搜的时候其实比较集中,shuffle一下之后正巧避免了这种情况。(应该可以说是解空间比较离散?)
真 XJB搜
Golf Gophers
题解:题目比较长,直接讲解法吧。
小数据就不说了,直接说大数据的解法:注意到我们只有7天,每天可以自由选择每个风扇叶片的个数。反应比较快的会注意到18中只有7个质数——中国剩余定理。
为什么是中国剩余定理呢?考虑每天我们选择每个风扇的叶片数是n,记\( \sum a[i]=sum_i\) ,那么有\( x≡sum_i (\mod n) \) 7天,也就是7个这样的方程,求解x即是中国剩余定理。为了求解方便,我们选取18以内的7个质数作为每天的叶片数。
但是这样还不够,你会发现\( \prod p_i<=10^6\),怎么办呢?不要紧,把2换成16就行。
Alien Rhyme
题解:白给题,没什么技巧,把字符串倒过来做Trie,然后在树上暴力统计结果就行。
争取打进ROUND3~!