UVA题解三

UVA题解三

UVA 127

题目描述(52)张扑克牌排成一列,如果一张牌的花色或者数字与左边第一列的最上面的牌相同,则将这张牌移到左边第一列的最上面,如果一张牌的花色或者数字与左边第三列的最上面的牌相同,则将这张牌移到左边第三列的最上面。只有最上面的牌可以移动,如果同时有多张牌可以移动,则先移动最左边的牌,若某张牌可以移到左边第三列的上面,则优先移到左边第三列。若某个时刻某一列为空,则那一列后面的列往前移动。求最后还剩多少列,以及每一列有多少张牌。

solution
直接栈模拟。因为每张牌最多前进(52)次,乘上每次查找哪一张牌可以移动,所以时间复杂度是三次方的。
时间复杂度:(O(n^3))

UVA 128

题目描述:输入一个字符串,将每个字符转化为对应的ASCII码的八位二进制数,按顺序串成一个超长的二进制数,现在要在这个超长二进制数后面加上一个十六位的二进制数,使得最终的二进制数能被(34943)整除。求出这个十六位二进制,输出对应的十六进制。

solution
将那个超长二进制数对(34943)取模,然后(34943)与余数的差就是答案,注意(0)的情况。
时间复杂度:(O(字符串长度))

UVA 133

题目描述(n)个人围成一圈,顺时针从(1)(n)编号,某个面试官从(1)开始顺时针数数,数到(k)的倍数的人出局,同时另一个面试官从(n)开始逆时针数数,数到(m)的倍数的人出局。如果数到同一个人,则只有那个人出局。直到最后一个人出局为止。输出每一轮出局的人。

solution
简单模拟,可以用双向链表优化,但数据比较小,可以不优化
时间复杂度:(O(n^3))(O(n^2))

UVA 136

题目描述:将质因子只有(2, 3, 5)的数从小到大排序,第一个数是(1),然后才是(2),输出第(1500)个数

solution
打表。(20)秒出结果。

UVA 138

题目描述:若一个数(n),存在一个数(m),使得(1)(m)的和等于(m)(n)的和,那么称(n)为神奇的数,输出前十个神奇的数以及他们对应的(m)

solution
打表。这里有一个技巧,就是n不断递增的同时,m也是递增的,所以可以双指针移动。2秒出结果。可以直接交这个程序,不打表。

UVA 143

题目描述:平面上给出一个三角形,问三角形里有多少个点。

solution
因为数据比较小,所以可以枚举点,然后判断点是否在三角形内,可以用等面积法,也可以用射线法。也可以进行优化,只枚举(x)坐标,然后算出(y)的范围。要注意的是这个三角形可能会退化为一条直线,所以枚举的点只能在三角形的特征矩形(能围住三角形内所有点的,边平行于坐标轴的最小矩形)里。
时间复杂度:(O(询问次数*坐标范围))

UVA 146

题目描述:规定了每个小写字母出现的次数,可以生成很多个字符串,将这些字符串按字典序排序,先给出一个字符串,问这个字符串的后继,若无,则输出No
Successor

solution
用笔模拟一些构造的过程,容易得出结论:从右往左找到第一个比右边字母要小的位置,然后在它的右边找到比它大的最小的字母替换它,最后将该位置右边的字母从小到大排序,得到的字符串就是后继。若找不到这个位置,则无解。
时间复杂度:(O(26*字符串长度))

UVA 147

题目描述:给出一种货币的所有面值((m)种),给出一个数((n)),用这种货币来表示这个数,输出方案数。

solution
完全背包。
时间复杂度:(O(nm))

UVA 151

题目描述:有(n)座城市,求一个最小的(m),使得从(1)开始数,然后往后数(m),循环数,最后一个数的数是(13)

solution
穷举(m),模拟,类似于UVA 133,如果最后一个数是(13),则输出。
时间复杂度:(O(m^2n^2))(O(m^2n))

UVA 156

题目描述:给出(n)个单词,找出哪些单词不能由其它单词重新排列得到。

solution
先记录每个单词的每个字母出现次数,两两枚举,若两个单词的每个字母的出现次数都相同,则这两个单词可以通过重新排列得到。
时间复杂度:(O(26n^2))

原文地址:https://www.cnblogs.com/GerynOhenz/p/7675425.html