题意:给出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)-二分搜索的更多相关文章

  1. PAT甲题题解-1032. Sharing (25)-链表水题

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  2. PAT甲题题解-1003. Emergency (25)-最短路径+路径数目

    给出n个城市,m条边,起始点c1和目的点c2接下来给出n个城市的队伍数以及m条双向边问你求c1到c2的所有最短路径数目,以及其中经过的最多队伍数 先最短路dijkstra,同时建立vector数组pr ...

  3. PAT甲题题解-1029. Median (25)-求两序列的中位数,题目更新了之后不水了

    这个是原先AC的代码,但是目前最后一个样例会超内存,也就是开不了两个数组来保存两个序列了,意味着我们只能开一个数组来存,这就需要利用到两个数组都有序的性质了. #include <iostrea ...

  4. PAT甲题题解-1070. Mooncake (25)-排序,大水题

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  5. PAT甲题题解-1078. Hashing (25)-hash散列

    二次方探测解决冲突一开始理解错了,难怪一直WA.先寻找key%TSize的index处,如果冲突,那么依此寻找(key+j*j)%TSize的位置,j=1~TSize-1如果都没有空位,则输出'-' ...

  6. PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大

    判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...

  7. PAT甲题题解-1012. The Best Rank (25)-排序水题

    排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...

  8. 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 ...

  9. PAT甲题题解-1036. Boys vs Girls (25)-找最大最小,大水题

    题意:给出n个人的姓名.性别.ID.分数,让你找出其中哪个妹纸分数最高.哪个汉子分数最低.以及他们的差如果没有妹纸或者汉子,则对应输出Absent,差用NA代替. 就是for一遍找最大最小值,水题 # ...

随机推荐

  1. Priority Queue

    优先队列 集合性质的数据类型离不开插入删除这两操作,主要区别就在于删除的时候删哪个,像栈删最晚插入的,队列删最早插入的,随机队列就随便删,而优先队列删除当前集合里最大(或最小)的元素.优先队列有很多应 ...

  2. pdf阅读器开发

    文章基于sumatrapdf的实现(当中mupdf中的内容不会太多涉及).以及自己在此基础上做的 优化,扩展.详细效果能够參考百度阅读器精简版. 最NB的还是得属于foxit.渲染速度一流,展示大图片 ...

  3. 【2018暑假集训模拟一】Day1题解

    T1准确率 [题目描述] 你是一个骁勇善战.日刷百题的OIer. 今天你已经在你OJ 上提交了y 次,其中x次是正确的,这时,你的准确率是x/y.然而,你最喜欢一个在[0; 1] 中的有理数p/q(是 ...

  4. Nginx端口占用问题

    错误信息:nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use) 主要是端口被占用 ...

  5. Docker实战(二)之操作Docker容器

    容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...

  6. rlwrap与历史命令

    # yum install rlwrap $ vi .bash_profile alias sqlplus='rlwrap sqlplus'alias rman='rlwrap rman' 或者 l ...

  7. haproxy安装及日志配置

    1.yum安装 yum install haproxy -y 2.配置文件修改,经典配置 vim /etc/haproxy/haproxy.cfg #------------------------- ...

  8. python+selenium+chrome driver 64位环境配置

    新换了电脑,重新配置下环境,备忘下 1.python2安装 https://www.python.org/downloads/release/python-2714/ 下载64位Windows x86 ...

  9. 关于Altium Designer 提示发送错误报告解决方法

    提示是这样子,,,,,, 稍微有点问题就提示,,,复制也提示,,,,移动也提示,,,,,,算是服了这个软件了.......真是忍无可忍,那就无需再忍,解决掉 以前是安装上一个虚拟的打印机就好了,,,其 ...

  10. python_分布式进程中遇到的问题

    看文档学习分布式进程中遇到了一下问题,文档里面例题是python2.X,我用的python3.x,就出现了一下莫名奇妙的问题,最终版代码先呈上: taskManager.py # coding:utf ...