昨天拿到了PAT甲级的满分,于是借机写一波解题报告和和考试历程,对应现在甲级习题集的1148-1151题。
先晒一下一次AC的提交记录~确实是运气太好,全部一次过,这是之前模拟的时候从未达成的。
说说考试的心路历程:第一题确实比较坑,很多人都被卡住了,我也不例外。刚开始没进入状态加上英语不好,阅读理解了五分钟还是似懂非懂。然后随手点了一下提交记录,发现第一题已经有十多个提交,但没人通过,而第二题居然直接有大佬AC了!当场我就惊呆了。。。估计大佬经历了读第一题——选择跳过——读第二题——秒杀,而这一切只花了不到五分钟orz。。。当时心想既然大佬都判断第一题不好做,那我是不是也应该跳过,但周围噼里啪啦的键盘声又让我觉得大家似乎都有了思路(现在想来估计很多人是在敲头文件吧。。。),最终决定再想五分钟,做不出就跳。然而思路偏了,一直在画方格图,试图理清推理方式或找到递推公式,五六分钟后仍没头绪,于是果断先放弃。好在2、3、4题都在刷题库的时候做过类似的,没遇到什么困难,顺利完成。其中2、3题算简单题,第4题难一些但是和题库1143太像。我比较幸运,考前挑了些30分的题2刷,其中就有1143,当时思考了一下后发现可以利用map把第四题转换成和1143一样的做法,于是最难的题也顺利搞定了(不过其中建树的函数有bug,找了10分钟吧,Dev-C++啥都好,就是我不会调试)。接着回头怼第一题,因为做完第3、4题的时候看了下排行,分别是并列第一和第二,估计大家都是把第一题跳了,于是我也默认第一题很难,拿出第二张草稿纸继续画图推导。当时真是走进死胡同了,总推不出来,心想这么难的题谁会做啊,于是退回又看了一眼通过人数——已经有60多人过了。然后突然就顿悟了:我是在用计算机啊,暴力枚举让电脑帮我算不就好了,O(100*100*100)=O(1000*1000),所以枚举估计也就3、4毫秒的事。最后终于把第一题解决,排名第五,走出考场的时候外面空空荡荡,就感觉很舒服~
接下来是解题报告,考虑到保持考场上的思考痕迹(其实就是懒),就直接把当时写的代码复制过来了,代码并不简练,可以说是想的少写的多,但这种策略是适合在考场上使用的。还有,为了节约时间,我一开就把所有头文件都写上然后复制粘贴建好cpp,所以头文件很冗杂,为方便阅读以下程序我把头文件都删了。
1148 Werewolf - Simple Version
题目叙述强行复杂化了,其实就是N个玩家里有2个狼人,其他为村民,而狼人和村