1010. Radix (25) pat
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的更多相关文章
- PAT 解题报告 1010. Radix (25)
1010. Radix (25) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 11 ...
- 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 ...
- pat 甲级 1010. Radix (25)
1010. Radix (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given a pair of ...
- 已经菜到不行了 PAT 1010. Radix (25)
https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...
- PAT (Advanced Level) 1010. Radix (25)
撸完这题,感觉被掏空. 由于进制可能大的飞起..所以需要开longlong存,答案可以二分得到. 进制很大,导致转换成10进制的时候可能爆long long,在二分的时候,如果溢出了,那么上界=mid ...
- PAT Advanced 1010 Radix(25) [⼆分法]
题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...
- PAT 1010 Radix (25分) radix取值无限制,二分法提高效率
题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...
- PAT甲题题解-1010. Radix (25)-二分搜索
题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...
- 【PAT甲级】1010 Radix (25 分)(二分)
题意: 输入两个数可能包含小写字母,1或者2,进制大小.第三个数为代表第一个数是第四个数进制的,求第二个数等于第一个数时进制的大小,不可能则输出Impossible,第三个数为2代表第二个数是第四个数 ...
随机推荐
- Codeforces 898F - Restoring the Expression(字符串hash)
898F - Restoring the Expression 思路:字符串hash,base是10,事实证明对2e64取模会T(也许ull很费时),对1e9+7取模. 代码: #include< ...
- robot切换窗口
在用robot做自动化测试的时候,经常遇到新开窗口,需要切换窗口的情况. 两种方式来解决: (1)用robot的关键字来解决 实现窗口切换的功能 @{handlelist} List Windows ...
- English trip -- VC(情景课) 6 B Events 事件
xu言: ... 自己选择的路,就算是爬,也要给我爬完.短短人生数载,我能之止于此? Words appointment 预约 meeting 会议 class movie party prog ...
- Connecting Vertices CodeForces - 888F (图论,计数)
链接 大意: 给定邻接表表示两点是否可以连接, 要求将图连成树, 且边不相交的方案数 n范围比较小, 可以直接区间dp $f[l][r]$表示答案, $g[l][r]$表示区间[l,r]全部连通且l, ...
- 『科学计算』通过代码理解线性回归&Logistic回归模型
sklearn线性回归模型 import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model de ...
- 用STL对一组数组进行排序和去重
#include <iostream> #include<cmath> #include "algorithm" #include "cstdio ...
- C# 字符串 相关操作
你或许知道你能使用String.Trim方法去除字符串的头和尾的空格,不幸运的是. 这个Trim方法不能去除字符串中间的C#空格. static void Main() { ...
- bind出现Address already in use解决方法
在socket函数和bind函数之间加入一段代码: // 建立服务器端socket if((server_sockfd = socket(AF_INET, SOCK_STREAM, 0))<0) ...
- 使用yum安装php72
1.执行yum search php72w查看自己的yum源有没有php72 如果自己有安装其它php版本先执行yum -y remove php* 2.没有php72执行以下命令扩展yum库,以下命 ...
- iOS UI-IOS开发中Xcode的一些使用技巧
一.快捷键的使用 经常用到的快捷键如下: 新建 shift + cmd + n 新建项目 cmd + n 新建文件 视图 option + cmd + 回车 打开助理编 ...