PAT1010
来源:互联网 发布:阿里云磁盘io 编辑:程序博客网 时间:2024/05/19 20:40
http://pat.zju.edu.cn/contests/pat-a-practise/1010
这是PAT通过率最低的一道题,只有0.07。就是给出2个数字,以及其中一个数字的基数,问在什么基数下,另一个数能够与之相等。
直接想法是将其中一个数字转化为计算机内部表示的数值,然后不断尝试另一个数字的基数,但是这样会不会超过 long long的表示范围呢?
题目中说给出的数字不超过10位,对基数(radix)没有限制,因此数值可能是无限大,应当用大数做,但是如果真的这样做,就被坑了。因为数据比较弱,人家long long就能过,你还在写大数,时间来不及。
所以此题应当补充一个条件,待比较数n在long long 范围内。一旦有此条件,我们可以推断,基数r也一定在long long 范围内,所以可以定义为long long,因为如果S只有1位,r最多也就36,如果S大于1位,r不会超过待比较数n。
1,将其中一个数转化为long long,待比较,记为n,目标数的字符串记为S,其基数为r;
2,估算基数r下界;
基数合法的下界应该是min(2,S中最大位+1),我在估算下界时wa了几次,一次是直接把2作为下界了,一次是S中最大位没有加1。
3,估算基数r上界;
在S至少有2位的情况下,目标数一定大于等于基数,因此基数大于待比较数n就没有意义了,此时上界是n。如果只有1位,单独处理。
4,二分法查找基数;
超时了一次就是因为没用二分法。因为数值和基数之间是正相关的,所以可以利用这个性质。每次比较返回一个结果,大于还是小于,当计算目标数为负,可以知道越界了,那么一定大于待比较数n,这点我没注意得了个wa。
5,当字符串只有1位时可能有多个答案,取最小,需要单独处理。
我又得了个wa,此时只要计算当r比较S所表示的数+1时的目标值就行了。
一共5个地方没注意,本人通过率为17%。
- pat1010
- PAT1010
- PAT1010
- pat1010
- pat1010
- PAT1010
- PAT1010
- pat1010
- PAT1010
- pat1010 Radix
- PAT1010(BUG)
- pat1010. Radix
- PAT1010 Radix
- PAT1010. 一元多项式求导
- pat1010. Radix (25) BUG!!!
- pat1010.Radix(25)
- PAT1010完美数列
- pat1010:一元多项式求导
- 不用加减乘除做加法与不用新的变量交换两个变量的值
- Lucene研究笔记
- hibernate id 及id Generator的详解
- Spring与Struts整合
- Ubuntu 下gcc,g++环境搭建
- PAT1010
- MD5加密
- Ext each 不是使用break,是使用return false 跳出循环
- 防止按钮在短时间内被多次点击
- 编写程序提示用户输入日期,输出这天为星期几。
- TP0-10-阅读-详解
- dojo的树状结构展示
- 黑马程序员_类加载器、内省、JavaBean、BeanUtil学习笔记
- 返回局部变量的问题