PAT (Advanced Level) Practise 1010. Radix (25)
来源:互联网 发布:幼儿教师网络研修计划 编辑:程序博客网 时间:2024/05/17 09:03
1010. Radix (25)
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 10Sample Output 1:
2Sample Input 2:
1 ab 1 2Sample Output 2:
Impossible
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;ll Map[256];void init(){ for(char c='0';c<='9';c++) Map[c]=c-'0'; for(char c='a';c<='z';c++) Map[c]=c-'a'+10;}ll convertNum10(char a[],int radix){ ll ans=0; int len=strlen(a); for(int i=0;i<len;i++) ans=ans*radix+Map[a[i]]; return ans;}int cmp(char n2[],ll radix,ll t){ int len=strlen(n2); ll num=convertNum10(n2,radix); if(num<0) return 1; if(num>t) return 1; else if(num<t) return -1; else return 0;}ll binarySearch(char n2[],ll left,ll right,ll t){ ll mid; while(left<=right){ mid=(left+right)/2; int flag=cmp(n2,mid,t); if(flag==0) return mid; else if(flag==-1) left=mid+1; else right=mid-1; } return -1;}int findLargestDigit(char n2[]){ int ans=-1,len=strlen(n2); for(int i=0;i<len;i++){ if(Map[n2[i]]>ans) ans=Map[n2[i]]; } return ans+1;}char n1[20],n2[20];int tag,radix;int main(){ init(); scanf("%s%s%d%d",n1,n2,&tag,&radix); if(tag==2) swap(n1,n2); ll t=convertNum10(n1,radix); ll low=findLargestDigit(n2); ll high=max(low,t)+1; ll ans=binarySearch(n2,low,high,t); if(ans==-1) printf("Impossible\n"); else printf("%lld\n",ans); return 0;}
- PAT (Advanced Level) Practise 1010. Radix (25)
- PAT (Advanced Level) Practise 1010. Radix (25)
- PAT (Advanced Level) Practise 1010Radix (25)
- 1010. Radix (25)——PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1010. Radix (25) C++
- PAT (Advanced Level) Practise 1010 Radix
- 【PAT Advanced Level】1010. Radix (25)
- 【c++】PAT (Advanced Level)1010. Radix (25)
- 【PAT】【Advanced Level】1010. Radix (25)
- PAT (Advanced Level) 1010. Radix (25) 进制匹配 二分法
- 浙大 PAT Advanced level 1010. Radix
- [PAT] (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- nuts软件
- Eclipse使用maven搭建spring mvc的详细步骤
- Java设计模式之代理模式
- Azure上搭建AD RMS环境系列二 -- RMS群集安装及内网测试
- es6 新特性整理
- PAT (Advanced Level) Practise 1010. Radix (25)
- Android自定义View分享——打钩动画
- c和c++如何把一个整数转化为string
- Python数据分析模块 | pandas做数据分析(一):基本数据对象
- 自動加入import -- Android Studio ctrl shit o
- 安卓Android--PPTP教程
- 传值设置mybatis查询的 列名(字段名),以及如何查看mybatis中执行的SQL语句
- Linux进程状态
- VueJS全面解析