这几天还是在USACO上面做题目,总的说来还是比较的郁闷,其实题目并不难,只是可能有段时间没有写程序,脑袋秀逗了吧,呵呵……
现在还是把Section 1.2总结一下吧,这样提高应该会快点……
Section 1.2 Complete Search
按照标题来说,这一节应该全部是穷举,所以应该没有什么内容,反正是穷举,全部搜一遍就OK……
Problem: Milking Cows
这道题大概是说一群工人给牛挤奶,每个工人都准备在一段时间内给牛挤奶,输入每个工人挤奶的时间段,求出最长的连续挤奶时间和牛最长的休息时间。
这道题给我的第一反应就是线段树,结果线段树忘记怎么写了,从四城那里昧来了一些论文看了看,也没怎么看懂,糊里糊涂的就开始做了,本来还准备写线段树的,结果写着写着就只剩线段没有树了(汗一个先),最后居然也过了,不过有一个Huge Input花了0.3秒,如果写了树结构应该会降低很多吧……
Problem: Transformations
这道题大概的意思就是输入二个图形,然后判定第二的图形是不是由第一个图形经过旋转、成像或者二者皆有或者不变得来的。
果然是穷举……我的做法是除了二者皆有,其他的每个写一个函数判定,二者皆有的情况就直接调用前面的函数判定就可以了。AC……后来看了他给的标程,是写了一个旋转的函数,一个成像的函数和一个比较的函数,然后反复调用旋转和成像的函数再判定即可……看了看,觉得这样搞,虽然时间多一点,不过确实可以减少代码量,而且反正这种小数据又不会超时……下次有这种题,我也这么搞好了,有懒不偷枉少年啊……呵呵……
Problem: Name That Number
这道题是这5道题中我做的最久的一道,题目的大概意思就是一个数字可以表示3个字符(就象手机的按键一样),而现在给出一个N位数(1<N<13),让你先枚举出这个数可能表示的所有的字符串,再把每一个枚举出的字符串都与他给定的一个字典(里面有5000个名字,而且非顺序)中的比较,如果字典中存在则输出。如果没有一个存在,则输出”NONE”。
当时拿着题目,我也没有想什么,反正是穷举……一顿狂搜就OK,所以写了个白痴搜索……TLE……换方法……这时候,我白痴的地方出现了……我居然不记得用二分了……天哪,狂晕……结果先对名字快排,然后以名字的前两位字母建了一个26*26索引,还优化了半天,终于AC了,不过在变态的数据下还是用了0.3秒……后来用了二分,结果所有的Case都是0.004秒……orz……
看了USACO的标程,里面有一个方法简直是BUG,没有对文件中的字符串进行排序,甚至没有生成字符串,而是直接从文件中顺序的找出所有满足输入的串……最后比二分还快……而且代码超短……再次orz……
Problem: Palindromic Squares和Dual Palindromes
都是判定回文的题目,前者是找出在一定进制下,1到300之间所有的平方是回文的数,而后者是给定开始的数,找出这个数之后N个满足至少用2种进制表示是回文的数。
这两道题实在是太简单了,反正是穷举,那就举吧……呵呵……
这次总结大概就是这样了,接下来的Section 1.3是贪心,又要去看看书了,黑书,我来啦……