A题:Self Numbers
基本上都做出来的一题,用的就是素数筛选的方法,当扫到一个位置n时,如果它是真,就把d(n)置假,然后是d(d(n)),然后是d(d(d(n)))....一直到大于等于10000停止,然后数组中值为1的就是self-numbers了。另外由于数据规模的原因,本题还可以暴力过,因为判断一个数n是不是self-numbers,只要判断它前面的某一个数能不能用d(n)的公式得到n,题中要求的最大的数是10000,各位相加最大不过28也就是说每个数最多只往前搜28位就可以了,复杂度O(n)。
B题:Soundex
字符串处理题,给出各个字母对应的数字和若干个字符串,让求字符串对应的数字序列,建一个map数组存储对应关系就行了,或者用一个函数处理字符返回所对应的值,就是几个if~else的事!注意若干个连续字符一样的时候只输出一个就可以了。
C题:Do the Untwist
这道题还算有点弯弯,给出一个由字符数组到数字数组,再由一定的运算规则(ciphercode[i] = (plaincode[ki mod n] - i) mod 28.)到另外一个一个数字数组,最后得出新的字符数组,就是密码,现在给你密码,让你反着来算原文,就是把上面的那个公式颠倒一下,变成由ciphercode求plaincode的公式,然后逆着求一遍就成了。
D题:Fire Net
这一题可以直接暴力枚举各个人的位置,由一个深搜就可以搞定。用一个数组存当前地图的状态,求下一个状态时枚举地图中的所有的点,找到合法的位置,继续找下一个状态,直到找不到合法位置为止!可回溯深搜,相当于暴力枚举。
E题: Dog & Gopher
本次比赛的水题之最,不知道大家为什么都没有做,可能是不习惯单实例的题吧。给出老鼠和狗狗的位置和n个洞的位置,老鼠和狗同时向同一个洞进发,狗狗的速度是老鼠的二倍,问有没有一个洞能让老鼠顺利逃走。可以发现,只要洞到老鼠的距离小于狗狗到洞的距离的一半就可以!枚举...
F题:Fire Station
比赛时放弃的一道题,不为别的,只为那万恶的英语!n个救火站,m个路口,n个救火站随机分布在n个路口中,m个路口有若干个路相连,让你加一个救火站,使得路口到救火站的最大距离最小,floyda求点对间距离,贪心求解即可!
G题:Booklet Printing
模拟题,除了输出控制比较烦人,原理倒是挺简单,用两个数组,一个从小往大存页码,一个从大往小存页码,输出的时候顺序输出就可以了。
H题:Finding Rectangles
看着比较复杂,枚举就成了,枚举所有的点,看能不能找到其他的三个点和它组成矩形,由于矩形的特殊性,判断起来也很容易,处理一下重复的就行了。
I题:Word Amalgamation
查找单词,给出一个字典,再给出若干个单词,看字典中有没有和所给单词字母种类和相同种类字母数量都一样的单词,记录字典中每一个单词中出现的字母和次数,然后和随给单词比较就行了。