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
 #include<stdio.h>
#include<string.h>
#include<map>
using namespace std; map<char,long long> mm; long long getlow(char n[])
{
long long Max = -;
for(long long i = ; i < strlen(n); i++)
{
if(Max < mm[n[i]])
Max = mm[n[i]];
}
return Max+;
} long long getx(char n[],long long radix)
{
long long sum = ;
for(long long i = ; i < strlen(n);i++)
{
sum = sum * radix + mm[n[i]];
}
return sum;
} long long compare(char n[],long long x,long long radix)
{
long long sum = ;
for(long long i = ; i < strlen(n);i++)
{
sum = sum * radix + mm[n[i]];
if(sum > x ) return ;
} if(sum == x) return ;
if(sum < x) return -;
} long long getresult(long long low,long long high,char n[],long long x)
{
//mid 要从low 开始,因为 当两个数相等的时候,它的进制数的最小值是low
long long mid = low ;
while(low <= high)
{
long long b = compare(n,x,mid);
if(b == ) return mid;
else if(b == )
{
high = mid -; }
else if(b == -)
{
low = mid+;
} mid = (low + high)/;
} return -;
} int main()
{
long long i;
for(i = '' ; i <= '';i++)
mm[i] = i - ''; for(i = 'a' ; i <='z' ; i++)
mm[i] = + i - 'a'; char n1[];
char n2[];
char ctem[];
long long tag;
long long radix;
scanf("%s%s%lld%lld",n1,n2,&tag,&radix);
if(tag == )
{
strcpy(ctem,n2);
strcpy(n2,n1);
strcpy(n1,ctem);
} long long x = getx(n1,radix); long long low = getlow(n2);
//上限是 x+1 : 10 9999 2 10
//low是 N2某一位上的数,而x 是N1,
//low 某一位上的数就比N1 大,
//那么N2无论什么进制,N1 和 N2肯定是不相等的。
//所以不用判断 low 和 x 的 大小
long long high = x + ;
long long result = getresult(low,high,n2,x);
if(result == -) printf("Impossible\n");
else
{
printf("%lld\n",result);
} return ;
}

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

  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. 1010. Radix (25)(未完成)

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

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

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

  7. 1010. Radix (25) pat

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

  8. 1010 Radix (25)(25 point(s))

    problem Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true ...

  9. 1010. Radix (25)(出错较多待改进)

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

随机推荐

  1. python(7)–类的多态实现

    第一步: 先定义三个类: class Animal: def __init__(self, name): self.name = name #这个方法的意思是,如果继承该类,就得自己写talk方法,如 ...

  2. javaweb学习总结十五(web开发的相关概念以及常用服务器介绍)

    一:java web开发的相关概念 1:web分为静态web和动态web 2:模拟web服务器 web页面如果想让外部网络访问,必须通过网络程序读取资源,流程: a:用户通过浏览器访问网络程序 b:网 ...

  3. postgresql常用SQL

    --查看数据库 select * from pg_database; --查看表空间 select * from pg_tablespace; --查看语言 select * from pg_lang ...

  4. CF Polycarpus' Dice (数学)

    Polycarpus' Dice time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. 关于JDK中正则表达式

    正则表达式的构造摘要 构造 匹配     字符 x 字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn ...

  6. 【策略】UVa 278 - Chess

    Chess  Almost everyone knows the problem of putting eight queens on an  chessboard such that no Quee ...

  7. BZOJ 3831

    3831: [Poi2014]Little Bird Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 121  Solved: 68[Submit][S ...

  8. JavaScript之模拟评星打分

    <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  9. SQL Server的三种物理连接之Loop Join(一)

    Sql Server有三种物理连接Loop Join,Merge Join,Hash Join, 当表之间连接的时候会选择其中之一,不同的连接产生的性能不同,理解这三种物理连接对性能调优有很大帮助. ...

  10. C#Winform版获取Excel文件的内容

    public MainForm() { InitializeComponent(); //this.ofd_in.DefaultExt = ".xlsx"; this.ofd_in ...