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 \(N_1\) and \(N_2\), 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

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

题意

给出两个正整数和其中一个数的基底,找到另一个数的基底,使两个数相等

思路

因为每个数不超过\(10\)位,每位最大都可能到z,所以待求的基底可能是一个很大的数,用二分法求另一个数的基底。

将一直基底的数求出来之后,二分另一个数的基底。如果当前基底下的结果小于\(0\)或大于已知数,那么这个基底就是偏大的,一直二分直至相等,否则返回\(-1\)。

二分的左区间为待求基底的每位数字上最大值加一,右区间为max(左区间,已知数)

代码

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+10;
const int mod=1e9+7;
const int maxm=1e3+10;
using namespace std;
ll get_num(string n,ll radix)
{
ll ans=0;
int l=n.length();
for(int i=l-1;i>=0;i--)
{
int res;
if(n[i]>='0'&&n[i]<='9')
res=n[i]-'0';
else
res=n[i]-'a'+10;
ans+=res*pow(radix,l-i-1LL);
}
return ans;
}
bool check(ll num,string n,ll radix)
{
ll res=get_num(n,radix);
if(num==res)
return true;
return false;
}
ll solve(ll num,string n)
{
ll l,r;
int low=0;
for(auto i:n)
{
if(i>='0'&&i<='9')
low=max(low,i-'0');
else
low=max(low,i-'a'+10);
}
l=low+1LL,r=max(1LL*l,num);
while(l<=r)
{
ll mid=(l+r)/2;
ll res=get_num(n,mid);
if(res<0||res>num)
r=mid-1;
else if(res<num)
l=mid+1;
else if(res==num)
return mid;
}
return -1;
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
srand((unsigned int)time(NULL));
#endif
ios::sync_with_stdio(false);
cin.tie(0);
string s1,s2;
int tag;
ll radix;
cin>>s1>>s2>>tag>>radix;
ll num1,num2;
if(tag==1)
{
num1=get_num(s1,radix);
if(solve(num1,s2)==-1)
cout<<"Impossible";
else
cout<<solve(num1,s2);
cout<<endl;
}
else
{
num2=get_num(s2,radix);
if(solve(num2,s1)==-1)
cout<<"Impossible";
else
cout<<solve(num2,s1);
cout<<endl;
}
#ifndef ONLINE_JUDGE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s.\n";
#endif
return 0;
}

PAT甲组 1010 Radix (二分)的更多相关文章

  1. PAT甲级1010. Radix

    PAT甲级1010. Radix (25) 题意: 给定一对正整数,例如6和110,这个等式6 = 110可以是真的吗?答案是"是",如果6是十进制数,110是二进制数. 现在对于 ...

  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 (二分)

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

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

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

  6. PAT 甲级 1010 Radix

    https://pintia.cn/problem-sets/994805342720868352/problems/994805507225665536 Given a pair of positi ...

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

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

  8. PAT Radix[二分][进制转换][难]

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

  9. PAT 1010 Radix(X)

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

随机推荐

  1. A Child's History of England.52

    'Arthur,' said the King, with his wicked eyes more on the stone floor than on his nephew, 'will you ...

  2. day04 查找关键字

    day04 查找关键字 昨日内容回顾 基本数据类型之日期相关类型 date :年月日 time :时分秒 datetime:年月日时分秒 year :年 基本数据类型之枚举与集合类型 # 枚举 多选一 ...

  3. Flink(八)【Flink的窗口机制】

    目录 Flink的窗口机制 1.窗口概述 2.窗口分类 基于时间的窗口 滚动窗口(Tumbling Windows) 滑动窗口(Sliding Windows) 会话窗口(Session Window ...

  4. APP调用系统相册,使用3DTouch重压,崩溃

    崩溃:app调用系统相册,使用3DTouch重压,崩溃 问题描述 app调用系统相册,使用3DTouch重压,一般的app都会崩溃. 解决方法 写个分类即可 @implementation UICol ...

  5. EM配置问题

    配置EM,首先要保证dbconsole在运行. C:\Users\dingqi>emctl start dbconsoleEnvironment variable ORACLE_UNQNAME ...

  6. 银行业评分卡制作——IV、WOE

    参考链接:https://blog.csdn.net/kevin7658/article/details/50780391 1.IV的用途 IV的全称是Information Value,中文意思是信 ...

  7. Linux的命令行基础

    1.对于全局配置文件和用户配置文件的认识 全局配置都存储在etc目录下,如/etc/profile文件,/etc/bashrc文件以及/etc/profile.d/目录下的.sh文件 用户配置都存储在 ...

  8. 2020ACTF pwn writeup

    为了打2021的ACTF,想着把2020年的pwn题做一做吧,发现2020年的pwn题质量还挺高的.反倒是2021年的题目质量不太高,好像是没有专门的pwn师傅出题,可以理解,毕竟办校赛,说白了就是用 ...

  9. 筛选Table.SelectRows-文本与数值(Power Query 之 M 语言)

    数据源: 包含文本与数值的任意数据 目标: 对文本和数值进行筛选 M公式: = Table.SelectRows( 表, 筛选条件) 筛选条件: 等于:each [指定列] = "指定值&q ...

  10. .net 6 (.net core) 发布到linux docker中

    第一步:VMware 安装 虚拟机Linux系统,本文以 CentOS 为例 .