UVA题解一
UVA 100
题目描述:经典3n+1问题在\(n \leq 10^6\)已经证明是可行的,现在记\(f[n]\)为从\(n\)开始需要多少步才能到\(1\),给出\(L, R\),问\(f[L], f[L+1], f[L+2], ... , f[R]\)中的最大值。
solution
这题主要是坑。。。
1、\(L\)有可能大于\(R\) 2、数据范围应该是\(10^6\)
言归正传。通过打表发现,\(10^6\)以内的\(f[n]\)最大也只是几百,普遍都很小,所以不用记忆化也可以把\(f[n]\)全部算出来,然后可以用rmq维护区间最大值,那么询问的代价可以缩为\(O(1)\)
PS:最终发现直接每次询问都做一遍也是可以过的。。。唉。。。
UVA 101
题目描述:有编号从\(0\)到\(n-1\)的\(n\)个箱子按顺序排成一行,现有\(5\)种操作:
1、move a onto b,将放在编号\(a\)或\(b\)上面的箱子放回原处,然后把\(a\)放在\(b\)的上面
2、move a over b,将放在编号\(a\)上面的箱子放回原处,然后把\(a\)放在\(b\)那堆箱子的最上面
3、pile a onto b,将放在编号\(b\)上面的箱子放回原处,然后把\(a\)以及\(a\)上面的箱子按原顺序放在\(b\)的上面
4、pile a over b,把\(a\)以及\(a\)上面的箱子按原顺序放在\(b\)那堆箱子的最上面
5、quit,结束操作
NOTE:如果\(a=b\),那么操作无效,即跳过该操作,不做任何处理
solution
英语不太好,没理解好题意,理解后就是一道栈模拟。
UVA 102
题目描述:有三个箱子,每个箱子都装着不同种类的垃圾,垃圾有三种:brown, green, clear bottles,现在要将垃圾分类,每个箱子只装一种垃圾,将一个垃圾移动一次记为一次操作,问最少要多少次操作才能将垃圾分类,并输出箱子对应的垃圾种类,若有多解则输出字典序最小的解。
solution
暴力穷举箱子对应的垃圾种类,不属于该箱子的就要移动一次
UVA 103
题目描述:有\(n\)个\(m\)维箱子,若第\(i\)个箱子每一维的边长为\(d_k\), 第\(j\)个箱子每一维的边长为\(e_k\),且存在一个\(d_k\)的排列,使得\(d_k<e_k\),那么箱子\(i\)可以放在箱子\(j\)的里面,问最多可以有多少层箱子嵌套。
solution
根据题意构图,然后跑一次最长路径
UVA 104
题目描述:有\(n\)种货币,货币两两之间有汇率\(rate\),但\(i\)对\(j\)的汇率与\(j\)对\(i\)的汇率不一定相同。从某一种货币出发,经过不超过\(n\)次的兑换,最终回到那种货币可能会能获利超过\(1%\),求出最少兑换次数对应的方案。
solution
因为题目问的是最少兑换次数,所以可以考虑一步一步地扩展。记\(f[i][j][k]\)表示经过\(i\)次兑换后,从\(j\)货币出发最多能得到多少\(k\)货币,dp时枚举\(p\),用\(f[i][j][k]*rate[k][p]\)更新\(f[i+1][j][p]\),当发现某一种货币对自己的汇率超过\(1.01\)时,就可以输出对应方案。
UVA 105
题目描述:给出\(n\)座大楼的坐标范围以及高度,求出每个坐标对应的最高高度。
solution
模拟题
UVA 106
题目描述:求出满足\(x<y<z \leq n, x^2 + y^2 =z^2, (x, y, z)=1\)的三元数对个数,并求出\(n\)以内不属于任何一个该种三元数对(去掉最后一个条件)的数字个数
solution
看到\(n\)比较大,还以为要\(nlogn\)预处理所有的答案,结果并不需要。。。
先不管\(x, y\)的大小。首先判断\(x, y\)的奇偶性。因为\((x, y, z)=1\),所以\(x, y\)一定是一奇一偶或者是两奇。
假设为两奇,则\(z\)为偶数,设\(x=2p-1, y=2q-1, z=2w\),
显然左式不是\(4\)的倍数,所以\(x, y\)为一奇一偶,\(z\)为奇数。
假设\(x\)为奇数,\(y\)为偶数
若\((z+y, z-y)=1\), 则\((y, z)=1\)
证:
因为\((z+y, z-y)=1\),所以\((z+y), (z-y)\)都是完全平方数,假设\((z+y)\)不是完全平方数,即存在一个质因子只有奇数个,但\((z+y)(z-y)\)是一个完全平方数,所以\((z-y)\)也会有那个质因子,\((z+y, z-y)=1\)不成立。
设\(p^2=z+y, q^2=z-y\), 则\(x=pq, y=\frac{p^2-q^2}{2}, z=\frac{p^2+q^2}{2}\)
显然\((x, y, z)=1, x, y < z\)
所以做法就是枚举\(p, q, (p, q)=1\),然后把\(kx, ky, kz, (k \in N^{*})\)打上标记,最后数一下有多少个数没有被标记(第二个询问的答案)
UVA 107
题目描述:已知\(N^k=M, (N+1)^k=H\), 给出\(M, H\),求出\(\sum_{i=0}^{k-1} N^i\)和\(\sum_{i=0}^{k} N^{i}(N+1)^{k-i}\)
solution
\(k=\frac{logM}{logN}=\frac{LogH}{log(N+1)}\),用这个条件把\(N\)逼近,然后就可以求\(k\),然后模拟计算
UVA 108
题目描述:求最大子矩阵和。
solution
时限开了\(3s\),可以直接暴力做,也可以用\(O(n^3)\)来做
UVA 109
题目描述:给出\(n\)个凸包和\(m\)个点,求出包含至少一个点的凸包的面积和。
solution
用等面积法判断点是否在凸包内,剩下的就是计算几何的知识。