FZU三月月赛小结
【小结】
写了DEH,罚时很多,权当惨痛教训了。
B题犯了很多很二的错误,很多细节没有考虑周全最终也没有过。
F的式子都已经推出来了,结果时间都拿去调试B了,最后十分钟草草写了一下WA了。B和F都挺可惜的。
【Update 2011年3月25日】
周一和今天把余下的题写了一下。
B的问题是做DP的时候把已经初始化的边界又做了一遍,更新的时候用到了一些非法的数据,所以挂了。当时如果多花点时间memset也可以消除这个错误的影响。
F的问题参见了师兄的报告,下面分析中再提。
最后一题看了一下出题人的BLOG,貌似是快速傅立叶变换,就先不写了。
【题解】
重新整理了一下,按照题目编号。
A:
挺水的一道题。dfs一下五个加权系数(5个for的话变成复杂度几乎没有了),只要注意五个系数相加等于一,然后分别计算即可。
比较担心精度的问题,把加权系数都*10换成了整数。
WA了几次,太急着太写完了囧,这样很不好。
B:
自顶向下和自底向上DP两次,题意还是比较清晰的。
一个非常需要注意的问题就是有些三角形不能作为正三角形的顶端,有些三角形不能作为倒三角形的顶端,比赛的时候没注意到这一点。还有需要注意的是DP边界的初始化和状态转移时的边界。
太久没有写DP了,对这些容易导致WA的地方太不敏感了。还有这一次在正三角倒三角的问题上太纠结了,记忆深刻,以后肯定不会再错了。
C:
看了出题人的题解,还是感觉这个hash的算法比较需要人品。不过写起来已经挺复杂了,还是写了一下。标准的解法应该是后缀数组,以后补上。
解题思路:
http://hi.baidu.com/aekdycoin/blog/item/8f91ac384b880ce63a87ce86.html
D:
题目说自己很Short,点进去看了看确实比较短,想了一下也不复杂,经典问题的变形,就直接写了。
RE了一次,开了1000000个int的数组。
TLE了一次,short不会用scanf读,用了cin。
WA了好多次,都是细节的问题。
其中的RE,TLE和很多次WA都是可以避免的,太急着交了,都没有考虑清楚。教训是cin和cout还是尽量不要用的好,写题前应该大致估算一下内存是不是够避免RE甚至推倒重写。很多细节还是应该查一查代码再确认一下再交,慢一些AC总是比罚时好。
E:
题意也很清晰,从2010-12-21往前数n天,输出。WA了几次,有闰年判断得乱七八糟的原因,还有输出格式的原因(不是严格的yyyy-mm-dd位数,用了%4d,%2d这样补空格的),都是很二的错误。
F:
公式推推,其实应该算数学题了。
不论谁赢,其实总方法数都是一样的,不用考虑是谁。枚举赢者的票数i(i>n/2),则其他的r=(n-i)张票分到k=(n-1)个人处,可推得方法数为C(r+k-1, k-1)=C(r+k-1, r) (可以用高中传说的“隔板法”推出)
如果没有人赢,方式=所有人投票的总方式数 - n*某人赢的总方法数。
两个教训写在代码的注释里了。
H:
H题是在写D的时候发现很快就有人过了,在D题RE和WA之后看了一些。给出经纬度求两地的距离。给出的位置先化成直角坐标系,再求两点直线距离,最后根据两地的张角求弧长。于是成了唯一一道1Y的题。代码加了一点注释。