首页 > 其他分享 >PAT 甲级【1010 Radix】

PAT 甲级【1010 Radix】

时间:2023-10-24 12:44:06浏览次数:36  
标签:二分 Radix PAT s2 long 查找 max n1 1010

  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),是用来在一个有序数组中查找某一元素的算法。

过程

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

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

性质

时间复杂度

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

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

空间复杂度

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

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

标签:二分,Radix,PAT,s2,long,查找,max,n1,1010
From: https://www.cnblogs.com/fishcanfly/p/17784540.html

相关文章

  • Spring MVC入口Servlet详解(HttpServletBean,FrameworkServlet,DispatcherServlet )
    SpringMVC中DispatcherServlet前端控制器是web服务器的入口,那么它是怎么样进行初始化的,是怎么样进行工作?继承关系1.HttpServletBean主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。2.FrameworkServlet将Serv......
  • DispatcherServlet初始化顺序详解
    1. Web容器启动时将调用HttpServletBean的init方法publicabstractclassHttpServletBeanextendsHttpServletimplementsEnvironmentAware{@Overridepublicfinalvoidinit()throwsServletException{//省略部分代码//1、如下代码的作用是将Serv......
  • PAT 甲级【1009 Product of Polynomials】
    /*系数为0不输出貌似runtime异常也显示答案不正确*/importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.StreamTokenizer;publicclassMain{@SuppressWarnings("unchecked")publicstaticvoidmai......
  • PAT 甲级1008【1008 Elevator】
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.StreamTokenizer;publicclassMain{@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args)throwsIOException{......
  • xpath的contains用法
    xpath('//div[contains(@class,"a")andcontains(@class,"b")]')#它会取class含有有a和b的元素xpath('//div[contains(@class,"a")orcontains(@class,"b")]')#它会取class含有a或者b满足时,或者同时满足时的元素starts-with顾名思义,匹......
  • PAT 甲级【1007 Maximum Subsequence Sum】
    本题是考察动态规划与java的快速输入:max[i]表示第i个结尾的最大的连续子串和。bbegin[i]表示第[begin[i],i]为最大和的开始位置超时代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{@Suppres......
  • OSPF(Open Shortest Path First)vlink-peer
    配置流程1)系统视图下启用ipv6ipv62)创建ospfv3进程ospfv3100//进程为100router-id1.1.1.1//唯一标识为1.1.1.13)配置端口#interfaceGigabitEthernet0/0/1ipv6enable ipv6address2023:23::2/64 ipv6addressautolink-localospfv3100area0.0.0.1//将接口划分......
  • PAT_A1044 Shopping in Mars
    ShoppinginMarsisquiteadifferentexperience.TheMarspeoplepaybychaineddiamonds.Eachdiamondhasavalue(inMarsdollarsM$).Whenmakingthepayment,thechaincanbecutatanypositionforonlyonceandsomeofthediamondsaretakenoffth......
  • 多路径multipath共享磁盘配置
    1. 配置共享磁盘1.1. 主机关机的情况下,添加4块硬盘,每块磁盘设置如下  1.2. 另外一台主机添加上面已经存在的磁盘,同样设置 1.3. 修改两台虚拟机的配置文件(.vmx)disk.locking="FALSE"disk.EnableUUID="TRUE"scsi1:1.SharedBus="Virtual"......
  • 内核文档翻译(chatgpt) —— Pathname lookup (路径名查找)
    原文:https://www.kernel.org/doc/html/latest/filesystems/path-lookup.html内核中文件系统相关的文档汇总:FilesystemsintheLinuxkernelThiswrite-upisbasedonthreearticlespublishedatlwn.net:PathnamelookupinLinuxRCU-walk:fasterpathnamelookupinLi......