1. 本题范围long型(35)^10
  2. 枚举radix范围上限pow(n/a0,1/m)上,考虑上限加1.范围较大。使用二分查找枚举
  3. 代码如下
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class Main {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] words = br.readLine().split(" "); String s1 = words[0]; String s2 = words[1]; int tag = Integer.valueOf(words[2]); long radix = Long.valueOf(words[3]); long n1 = 0;
long n2 = 0;
long max = 0; if (tag == 2) {
StringBuilder sb = new StringBuilder(s1);
s1 = s2;
s2 = sb.toString();
}
n1 = get(s1, radix);
max = getmax(s2);
long last = -1;
int m = s2.length();
long bound = max + 1;
long upper = max + 1;
if (m != 1) {
upper = (long) Math.pow((double) n1 / (select(s2.charAt(0))), 1.1f / (m - 1))+10;
// bound = (long) Math.pow((double) n1 / (select(s2.charAt(0)) + 1), 1.1f / (m - 1));
}
// bound = Math.max(max + 1, bound);
// while (bound <= upper) {
long mid = (bound + upper) / 2;
n2 = get(s2, mid);
if (n2 > n1) {
upper = mid - 1;
} else if (n2 == n1) {
System.out.println(mid);
return;
} else {
bound = mid + 1;
}
}
System.out.println("Impossible");
return;
} public static long getmax(String s2) {
long max = 0;
for (int i = 0; i < s2.length(); i++) {
long digit = select(s2.charAt(i));
if (digit > max) {
max = digit;
}
}
return max;
} private static long get(String s1, long radix) {
long n1 = 0;
long base = 1;
for (int i = s1.length() - 1; i >= 0; i--) {
long digit = select(s1.charAt(i));
n1 += digit * base;
base *= radix;
}
return n1;
} public static long select(char ch) {
if (ch >= '0' && ch <= '9') {
return ch - '0';
} else {
return ch - 'a' + 10;
}
}
}

二分

本页面将简要介绍二分查找,由二分法衍生的三分法以及二分答案。

二分法

定义

二分查找(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是用来在一个有序数组中查找某一元素的算法。

过程

以在一个升序数组中查找一个数为例。

它每次考察数组当前部分的中间元素,如果中间元素刚好是要找的,就结束搜索过程;如果中间元素小于所查找的值,那么左侧的只会更小,不会有所查找的元素,只需到右侧查找;如果中间元素大于所查找的值同理,只需到左侧查找。

性质

时间复杂度

二分查找的最优时间复杂度为 

二分查找的平均时间复杂度和最坏时间复杂度均为 。因为在二分搜索过程中,算法每次都把查询的区间减半,所以对于一个长度为  的数组,至多会进行  次查找。

空间复杂度

迭代版本的二分查找的空间复杂度为 

递归(无尾调用消除)版本的二分查找的空间复杂度为

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

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

  5. PAT甲组 1010 Radix (二分)

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

  6. PAT甲级1010踩坑记录(二分查找)——10测试点未过待更新

    题目分析: 首先这题有很多的坑点,我在写完之后依旧还有第10个测试点没有通过,而且代码写的不优美比较冗长勿喷,本篇博客用于记录写这道题的一些注意点 1.关于两个不同进制的数比大小一般采用将两个数都转化 ...

  7. PAT甲级——A1010 Radix

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

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

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

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

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

  10. PAT 1010 Radix(X)

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

随机推荐

  1. ABC270F 题解

    和博客园一样好的体验 思路 首先看到花最小代价使得所有点连通,果断转换成最小生成树问题. 接下来就要考虑怎么建图,首先陆地就正常连不用说,建机场和港口的代价貌似都是点权,考虑转成边权.因为一个点飞或者 ...

  2. 哈希表(HashMap)与字符串哈希

    哈希表 哈希表是一种通过映射来快速查找的数据结构.其通过键值对(key-value)来存储.一个数据通过哈希函数的运算来生成一个属于他自己的键值,尔后将其与键值绑定.当我们想查找这个数据时,就可以直接 ...

  3. ListView改变行高的技巧

    改变 ListView 的行高 (Line Height) (cjc,2009.6.2) 改变 ListView 的行高 (Line Height) (cjc,2009.6.2) ListView在R ...

  4. Elasticsearch不同集群间备份恢复(S3存储)

    S3存储 首先都知道需要在ES集群上安装S3插件以及重启集群 在MINIO集群创建相应的桶 Kibana上注册快照存储库,两个不同的集群需要对接到同一个S3存储库,对接后会自动识别桶里的快照 < ...

  5. react 聊聊setState异步背后的原理,react如何感知setState下的同步与异步?

    壹 ❀ 引 在react中的setState是同步还是异步?react为什么要将其设计成异步?一文中,我们介绍了setState同步异步问题,解释了何种情况下同步与异步,异步带来了什么好处,以及rea ...

  6. JS模块化系统

    随着 JavaScript 开发变得越来越广泛,命名空间和依赖关系变得越来越难以处理.人们已经开发出不同的解决方案以模块系统的形式来解决这个问题. CommonJS(CJS) CommonJS 是一种 ...

  7. 【framework】TaskStack简介

    1 前言 ​ TaskStack 用于管理 app,一般一个应用程序对应一个 TaskStack,其父容器为 TaskStackContainers(DisplayContent 的子容器),子容器为 ...

  8. 将JavaBean对象转换为Map集合

    使用jackson-databind可以将JavaBean对象属性转换为Map集合. 添加配置依赖: <dependency> <groupId>com.fasterxml.j ...

  9. 基于java的学生信息管理系统

    开发说明:使用数组集合存储临时数据,实现学生信息管理系统,实现的功能有管理员的注册.登陆.增加学生信息.删除学生信息.查询学生信息.修改学生信息.学生信息列表 登陆注册界面 系统首页界面 增加 删除 ...

  10. 内存管理(二)之别小看了Tagged-Pointer关键时刻起到大作用

    本文主要研究Tagged Pointer技术,针对该技术需要解决的问题.以及在实际应用中的价值做一些简单的探讨. 如果你想要更进一步,去挖掘Tagged Pointer是如何实现的,可以参考Frida ...