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. Java 数据类型转化

    目录 Java类型转化 基本数据类型自动类型转换 自动类型提升 强制类型转换 - 自动类型提升的逆运算 int与long int类型与String类型 int类型转换成String类型 方法1:+ 拼 ...

  2. abide, able, abnormal

    abide 近/反义词:1. 忍受: bear, endure, put up with, stand, tolerate2. 遵守(abide by): accept, comply, confor ...

  3. 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)

    一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...

  4. 转 MessageDigest来实现数据加密

    转自 https://www.cnblogs.com/androidsuperman/p/10296668.html MessageDigest MessageDigest 类为应用程序提供信息摘要算 ...

  5. ORACLE CACHE BUFFER CHAINS原理

    原理图如下: 一个cache buffer chains 管理多个hash bucket,受隐含参数:_db_block_hash_buckets(控制管理几个hash bucket)

  6. jstl中的foreach标签

    <%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...

  7. Redis操作命令合集

    目录 一.客户端命令 二.sql命令 一.客户端命令 #读取配置文件启动 redis-server redis.conf #关闭 Redis,Redis服务器将断开与客户端链接,产生持久化文件,平滑关 ...

  8. zctf_2016_note3(unlink)

    这道题完全没想到漏洞在哪(还是菜了) 这道题目我通过海哥的博客学习的 (16条消息) zctf_2016_note3_seaaseesa的博客-CSDN博客 例行检查我就不放了 进入edit页面 这里 ...

  9. 【二进制】CTF-Wiki PWN里面的一些练习题(Basic-ROP篇)

    sniperoj-pwn100-shellcode-x86-64 23 字节 shellcode "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\ ...

  10. 【web】php文件包含(利用phpinfo)

    Docker搭建复现环境 地址:https://github.com/vulhub/vulhub/tree/master/php/inclusion ps. github单独下载一个文件夹的方法: 安 ...