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. 1.python+selenium利用cookie,跳过验证码直接登录

    方法1 在登录时,叫代码等待一段时间,然后手动输入验证码 # coding:utf-8 from selenium import webdriver import time url = 'http:/ ...

  2. 20170801xlVBA含有公式出现弹窗合并

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub GatherD ...

  3. 20161210xlVBA一行数据转为四行

    Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...

  4. HDU-3729 二分匹配 匈牙利算法

    题目大意:学生给出其成绩区间,但可能出现矛盾情况,找出合理组合使没有说谎的人尽可能多,并按maximum lexicographic规则输出组合. //用学生去和成绩匹配,成绩区间就是学生可以匹配的成 ...

  5. 页面title改变浏览器兼容性问题

    前一阵子客户在界面上改了下小小的需求,需要点不同的文章title显示不同的模块名称(之前没有区分,统一叫新闻图片),很简单的一个需求但是测试的时候并没有注意到不兼容IE7和IE8.在客户那被尴尬的发现 ...

  6. UVA-10118 Free Candies (DP、记忆化搜索)

    题目大意:有4堆糖果,每堆有n个,有一只最多能容5个糖果的篮子.现在,要把糖果放到篮子里,如果篮子中有相同颜色的糖果,放的人就可以拿到自己的口袋.如果放的人足够聪明,问他最多能得到多少对糖果. 题目分 ...

  7. Eclipse偏好设置的导入与导出

    偏好导入:File--->Import

  8. POJ 1014 Dividing (多重可行性背包)

    题意 有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两份的总价值相等,其中一个物品不能切开,只能分给其中的某一方,当输入六个0是( ...

  9. 一篇来自网络的关于“enqueue”events的简短参考(转)

    仅供自己和各位同学参考: Enqueue Type Description enq: AD - allocate AU Synchronizes accesses to a specific OSM ...

  10. js中的deom ready执行的问题

    一开始我想到这,DOMContentLoaded,不兼容, <!DOCTYPE html> <html> <head> <meta charset=" ...