第2部份的4道题开始啦!
Sortint It All Out,我用的是Floyd算法去判断有没有inconsistency(检查是否有自己相连的情况),然后统计已经得到的点的出入度(Floyed后,满足题意时出入度正好是0,1,2,...,n-1)可以去确定是否determine。不过这个算法貌似十分低效,正解应该是Topological Sorting……
#include
#include
#include
Space Station Shielding惭愧地搞定。一开始用DFS搜里面的grid cubes,后来发现没办法区分里面和外面,看了别人的代码后发现应该搜不属于这个n*m*k grid的外面一层,这样就可以判定里外了。一开始仍然用刚开始写的DFS,发现SF,测试了60 60 60 1 0这个数据发现的确是DFS太深Stack Overflow了,于是通过vector改用BFS,需要判断已加入vector的元素(已加入则一定不能再加入),用一个62*62*62的数组保存加入情况(本来使用find判断,后来发现自定义数据结构似乎无法用find?)。只要想到了以上这些写起来就比较方便:遇到ACM就加一个面,遇到非ACM的有效cube就不重复地加入vector,无效的情况就跳出。
#include
#include
#include
Square Ice搞定!很简单的模拟题(涉及到一点点的数列),固定m后,实际上除了'-'和'|'其他的字符全部都固定了(数列推一下即可),确定'-'和'|':+-1的情况很容易,0的情况只要看上面的或左边的'H'有没有被使用(用一个bool数组储存是用情况),没有就是用,有就是用下面的或右边的'H'即可(之所以是这样的顺序是因为推的过程是从上到下、从左到右,如果推的过程相反,那么前面的判断也应该相反)。最后在192上提交30ms,是最慢的,但不是很清楚哪里慢了……
#include
#include
#include