散列
这个真的很简单了,就是开个数组存一存。基本都是水题。其实这些题,很多有许多更好的方法,在这些题里使用散列实际上是一种暴力做法,对于输入比较小的题目可行。
拿到一道题,我们要思考它是要求不重复,还是求数量相关这些角度来考虑开布尔数组还是实型数组计数。有的题目可能要求按顺序输出,不重复输出,像这类问题我们只需要多开几个布尔数组标记就可解决问题。
对于字符串类的题目,我们一般开长度为256的标记数组或者计数数组,即使题目说明某些字符不出现也没有关系,只要我们对开的散列进行正确的初始化,多开并不会影响程序的正确性。对于一些题目,可能跟坏键相关的,需要对大小写字母进行处理,因为键盘上没有两个"A"键。
总而言之,我们考虑题目需要什么,然后开相应的散列,必要时要做一些转化和映射处理。转化如上面提到的大小写之间的处理,可以统一处理成大写字母或者小写字母。映射处理比如八皇后问题里,直线的b值可能是负数,那我们可以加一个偏移量将其全部映射到正数上。
A1120 Friend Numbers
A1120 Friend Numbers
送分,会求数字各个位数数字就行。因为输入在10^4以内,所以最大各位和是36。
A1041 Be Unique
A1041 Be Unique
求序列中第一个唯一出现的数字。
A1050 String Subtraction
A1050 String Subtraction
从一个字符串中删去某些字符。
A1084 Broken Keyboard
A1084 Broken Keyboard
概述里提到的,要转化大小写字母,其他没有什么了。
A1092 To Buy or Not to Buy
A1092 To Buy or Not to Buy
这道题要注意珠子只要缺了任何一个都不可行,即使有别的珠子剩余,所以要分开计数。
A1121 Damn Single
A1121 Damn Single
姥姥怕是对单身狗有什么误解。找出在宴会中本身是单身的或者配偶不在party中的即可。最后再排序输出。
A1144 The Missing Number
A1144 The Missing Number
这题可以考虑使用分块思想进行优化,这样可以遍历块,先找出有缺失的块(注意最后一块的尺寸可能和其他块不一样),再在块内遍历寻找缺失的最小正数。
A1149 Dangerous Goods Packaging
A1149 Dangerous Goods Packaging
稍微值得看一下,这题很容易想到并查集,其实不是。
A1128 N Queens Puzzle
A1128 N Queens Puzzle
经典八皇后问题,看来PAT还是会考一些经典问题。这题主要是利用散列存储各条直线(包括横轴线、纵轴线、正对角线、反对角线)上是否有棋子,如果一条线上重复出现棋子,则说明摆放不合法。
排序
这类题基本都是水题,PAT中其实很多类型真是送分题,算法都不需要用的。注意题目给的排序优先级,相同分数