Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is "yes", if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N1 and N2, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:
N1 N2 tag radix
Here N1 and N2 each has no more than 10 digits. A digit is less than
its radix and is chosen from the set {0-9, a-z} where 0-9 represent the
decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The
last number "radix" is the radix of N1 if "tag" is 1, or of N2 if "tag"
is 2.


Output Specification:

For each test case, print in one line the radix of the other number
so that the equation N1 = N2 is true. If the equation is impossible,
print "Impossible". If the solution is not unique, output the smallest
possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

题意很好理解,给出两个数,给出其中一个的radix,求是否存在适合的radix让两个数相等,
最初还在想radix的范围,就想肯定不能是1,最小是2,题中说最大为z(35),应该是2-36,肯定不对,没好好考虑,
要确定范围,下边界肯定不能从2开始,应该找出最大的数字,对他加一,才是下边界,因为题目说A digit is less than its radix,
然后上边界应该是下边界和给出radix的那个数的当中最大的那个,这个比较好理解,上边界肯定不能比下边界小,如果给出的N比下边界大,那么分两种情况,
未知radix的数如果是一位数,那么就不用管上边界了,假如有合适的肯定是下边界,如果不是单位数,肯定大于等于10,以N为进制的10正好等于N,所以上边界不能超过N了。
再就是如果排着尝试,必定会超时,可以用二分法,人家没说数的范围,封顶是64位长整型,计算的过程中容易溢出,变为负数要做特殊处理。 代码:
#include <iostream>
using namespace std;
int main()
{
string a,b;
long long tag,radix;
long long l,r;
int flag = ;
cin>>a>>b>>tag>>radix;
long long aa = ,bb = ;
if(tag == )swap(a,b);///这样做可以少写点代码,不用分情况了 for(int i = ;i < a.size();i ++)///先计算已知radix的数
{
if(a[i] >= '' && a[i] <= '')
{
aa = aa * radix + a[i] - '';
}
else if(a[i] >= 'a' && a[i] <= 'z')
{
aa = aa * radix + a[i] - 'a' + ;
}
}for(int i = ;i < b.size();i ++)
{
if(b[i] >= 'a' && b[i] <= 'z' && b[i] - 'a' + >= l)l = b[i] - 'a' + ;///下边界这里直接加一了,本来是加十,所以加十一
else if(b[i] >= '' && b[i] <= '' && b[i] - '' >= l)l = b[i] - '' + 1;
}
r = aa > l?aa:l;///确定上边界
long long mid = (l + r) / ;
while(l <= r)
{
bb = ;
for(int j = ;j < b.size();j ++)
{
if(b[j] >= '' && b[j] <= '')
{
bb = bb * mid + b[j] - '';
}
else if(b[j] >= 'a' && b[j] <= 'z')
{
bb = bb * mid + b[j] - 'a' + ;
}
if(bb < || bb > aa)break;///溢出的特殊处理
}
if(aa == bb)
{
cout<<mid;
flag = ;
break;
}
if(bb < ||bb > aa)r = mid - 1;///溢出的特殊处理else l = mid + ;
mid = (l + r) / ;
}
if(flag == )cout<<"Impossible";
}

1010. Radix (25) pat的更多相关文章

  1. PAT 解题报告 1010. Radix (25)

    1010. Radix (25) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 11 ...

  2. PAT 甲级 1010 Radix (25)(25 分)进制匹配(听说要用二分,历经坎坷,终于AC)

    1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...

  3. pat 甲级 1010. Radix (25)

    1010. Radix (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given a pair of ...

  4. 已经菜到不行了 PAT 1010. Radix (25)

    https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...

  5. PAT (Advanced Level) 1010. Radix (25)

    撸完这题,感觉被掏空. 由于进制可能大的飞起..所以需要开longlong存,答案可以二分得到. 进制很大,导致转换成10进制的时候可能爆long long,在二分的时候,如果溢出了,那么上界=mid ...

  6. PAT Advanced 1010 Radix(25) [⼆分法]

    题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...

  7. PAT 1010 Radix (25分) radix取值无限制,二分法提高效率

    题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...

  8. PAT甲题题解-1010. Radix (25)-二分搜索

    题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...

  9. 【PAT甲级】1010 Radix (25 分)(二分)

    题意: 输入两个数可能包含小写字母,1或者2,进制大小.第三个数为代表第一个数是第四个数进制的,求第二个数等于第一个数时进制的大小,不可能则输出Impossible,第三个数为2代表第二个数是第四个数 ...

随机推荐

  1. JS中Ajax的同步和异步

    ajax同步 : 意味着此时请求Server后,JS代码不再继续执行,等待Server返回后才继续往下执行. ajax异步 : 意味着此时请求Server后,JS代码继续执行,不管Server什么时候 ...

  2. 动态规划3--Help Jimmy

    动态规划3--Help Jimmy 一.心得 二.题目 三.分析 Jimmy跳到一块板上后,可以有两种选择,向左走,或向右走.走到左端和走到右端所需的时间,是很容易算的.如果我们能知道,以左端为起点到 ...

  3. ArcGIS API for Silverlight——小滑块

    Widgets翻译过来是小玩具.如果使用过Dojo或者ExtJS等js框架肯定会了解到这个“小玩具”也有大用处,能够在很大程度上减少我们的工作量,快速完成功能需求.能减少多大工作量呢?让我们先来,点击 ...

  4. android--------自定义弹幕控件(视频弹幕操作)

    弹幕功能在很多平台上都有,直播平台,视频播放器,音乐等上面都有, 直播平台发送弹幕和主播互动,那么弹幕效果是怎么实现的呢. 案例主要是实现视频出现弹幕,可以文字和表情弹幕,启动和关闭弹幕,发布弹幕. ...

  5. Strip CodeForces - 487B (单调队列)

    题面: Alexandra has a paper strip with n numbers on it. Let's call them ai from left to right. Now Ale ...

  6. in_array的效率

    in_array函数是个糟糕的选择.应该尽量用isset函数或array_key_exists函数来替代 .in_array函数的复杂度是O(n),而isset函数的复杂度是O(1) isset函数是 ...

  7. hdu 1226 bfs+余数判重+大数取余

    题目: 超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. ZOJ 2770 差分约束+SPFA

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  9. sql 智能提示

    依次打开SSMS—>工具—>选项—>文本编辑器—>Transact-SQL—>IntelliSense—>检查右侧窗体是否启用!!

  10. 10. Regular Expression Matching *HARD*

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...