PAT甲题题解-1010. Radix (25)-二分搜索
题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等。不存在的话,则输出Impossible
这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的。
有两个注意点
1.我被题目给骗了!!!以为最大进制只可能是36,所以在程序里就枚举2~36的进制,导致错了一大片样例
最小进制下界low当然是n2的最大数字位+1
最大进制上界high题目没有给出说明,但最大只可能为n1(前提n1>=low)。
为啥不会超过n1呢,比如
40 10 1 10
很明显10是进制表示除“个位”外最小的了,那么只有当进制为40时,它才等于n1,如果进制再大,就肯定大于n1了。
2.如果从low枚举到high,当high很大的时候,会很费时间,题目也设了一个样例会让你超时。
所以这里需要二分搜索二进制k
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
using namespace std;
char n1[],n2[];
int t,r;
long long tmp; /*
val2为n2在k进制下的值
val2<target,return -1
val2==target,return 0
val2>target,return 1
*/
int cmp(long long*a,long long k,long long target,int len){
long long val2=;
for(int i=;i<len;i++)
val2=val2*k+a[i];
//val2可能存在溢出的问题,这里要注意。
if(val2< || val2>target)
return ;
if(val2<target)
return -;
if(val2==target)
return ;
}
//二分搜索进制k
long long binarySearch(long long *a,long long low,long long high,long long target,int len){
long long l=low,r=high;
long long mid;
while(l<=r){
mid=(l+r)/;
if(cmp(a,mid,target,len)==)
return mid;
if(cmp(a,mid,target,len)<){
l=mid+;
}
else{
r=mid-;
}
}
return -; //impossible
}
int main()
{
scanf("%s %s %d %d",n1,n2,&t,&r);
if(t==){
swap(n1,n2); //交换一下,方便后面处理
}
char num[];
strcpy(num,n1);
int len=strlen(num);
long long val1=; //转化成十进制
for(int i=;i<len;i++){
if(''<=num[i] && num[i]<='')
tmp=num[i]-'';
else if('a'<=num[i] && num[i]<='z')
tmp=num[i]-'a'+;
val1=val1*r+tmp;
}
strcpy(num,n2);
len=strlen(num);
long long low=;
long long a[]; //将n2的字符表示转化成数组存储
for(int i=;i<len;i++){
if(''<=num[i] && num[i]<='')
tmp=num[i]-'';
else if('a'<=num[i] && num[i]<='z')
tmp=num[i]-'a'+;
a[i]=tmp;
if(tmp>low)
low=tmp;
}
low=low+;
long long high=max(low,val1)+;
long long ans=binarySearch(a,low,high,val1,len);
if(ans==-)
printf("Impossible\n");
else
printf("%lld\n",ans);
return ;
}
PAT甲题题解-1010. Radix (25)-二分搜索的更多相关文章
- PAT甲题题解-1032. Sharing (25)-链表水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- PAT甲题题解-1003. Emergency (25)-最短路径+路径数目
给出n个城市,m条边,起始点c1和目的点c2接下来给出n个城市的队伍数以及m条双向边问你求c1到c2的所有最短路径数目,以及其中经过的最多队伍数 先最短路dijkstra,同时建立vector数组pr ...
- PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了
这个是原先AC的代码,但是目前最后一个样例会超内存,也就是开不了两个数组来保存两个序列了,意味着我们只能开一个数组来存,这就需要利用到两个数组都有序的性质了. #include <iostrea ...
- PAT甲题题解-1070. Mooncake (25)-排序,大水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- PAT甲题题解-1078. Hashing (25)-hash散列
二次方探测解决冲突一开始理解错了,难怪一直WA.先寻找key%TSize的index处,如果冲突,那么依此寻找(key+j*j)%TSize的位置,j=1~TSize-1如果都没有空位,则输出'-' ...
- PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大
判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...
- PAT甲题题解-1012. The Best Rank (25)-排序水题
排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...
- PAT甲题题解-1033. To Fill or Not to Fill (25)-模拟
模拟先说一下例子,最后为方便起见,在目的地安增加一个费用为0的加油站0 1 2 3 4 5 6 7 87.1 7.0 7.2 6.85 7.5 7.0 7.3 6.0 00 150 200 300 4 ...
- PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题
题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...
随机推荐
- MySQL核心之双一原则
所谓的双一就是指: sync_binlog=; innodb_flush_log_at_trx_commit= innodb_flush_log_at_trx_commit和sync_binlog这两 ...
- 启动 uiautomatorviewer 时报 SWT folder '..\lib\location of your Java installation.' does not exist.
现象,之前本机上的 uiautomatorviewer 一直是好的,最近这段时间无故就不行了,报如标题错误,网上找了各种办法仍无法有效解决,静心细想上一次使用该工具时到目前对本机有做什么跟系统或者工具 ...
- Learn Algorithms With Javascript - 基于 Js 进行算法学习
基于 javascript 学习并实现常用的经典算法,欢迎对算法和数学感兴趣的 Js 开发者参与,一起学习共同进步. 算法实现 排序 插入排序 sort/lib/insertion-sort.js 希 ...
- 线程同步方式之互斥量Mutex
互斥量和临界区非常相似,只有拥有了互斥对象的线程才可以访问共享资源,而互斥对象只有一个,因此可以保证同一时刻有且仅有一个线程可以访问共享资源,达到线程同步的目的. 互斥量相对于临界区更为高级,可以对互 ...
- Sublime2 DocBlocker插件在自动补全注释时输出自定义作者和当前时间等信息
Sublime在进行前端开发时非常棒,当然也少不了众多的插件支持,DocBlocker是在Sublime平台上开发一款自动补全代码插件,支持JavaScript (including ES6), PH ...
- 百度地图Key的设置方法
一.为什么要设置百度Key 万能地图下载器提供了百度POI的下载功能,但由于本软件用户群极大,会导致一天之内访问量超出300万次以上而无法继续下载. 因此,当POI下载不成功能,用户可以自己申请百度地 ...
- redis命令手册
Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...
- Docker Java应用日志时间和容器时间不一致
1.在docker容器和系统时间不一致是因为docker容器的原生时区为0时区,而国内系统为东八区. 2.还有容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时 ...
- PSR规范0-4整理
PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...
- 飞冰ICE
一. 飞冰目标与愿景(同时也概况飞冰是什么) 飞冰是一套基于 React 的中后台应用解决方案,在阿里巴巴内部,已经有 270 多个来自几乎所有 BU 的项目在使用.经过 2 年的发展,飞冰已经是中后 ...