zoukankan      html  css  js  c++  java
  • 洛谷

    https://www.luogu.org/problemnew/show/P2293

    要求求出给定高精度整数的非负根取整的结果。

    还有神仙用Python的浮点pow运算骗到不少分的。

    唉!

    那么我们使用保险的语言:Java,需要怎么做呢?

    高精度数是10的10000次方,他的根应该在10的100次方附近?(题目没说是平方根啊,乱搞!)

    我们先读入一个String,数出String有多少位,在这个位数的左右至多4位范围进行二分答案。

    自己瞎搞了很久,不是T就是M的,还以为是语言的劣势。

    其实是自己的二分的范围过大了。(至少限制一下r,当k比较大的时候r是很小的,k比较大的时候大数的乘方运算开销大,节省的时间就多很多了)

    像神仙那样先用logn缩小范围就挺好内存80MB,速度是2.5秒。

    由于跑得飞快,实际上还可以加入cnt-gc大法。设置cnt模100,内存降至40MB,速度是4秒。

    但是Python只需要0.5秒和4MB哦!据说是因为Python的底层是用C语言实现的!(但是不限制二分范围也只是比Java多过一个点)

    (还好大部分icpc应该对每种语言是公平的)

    import java.util.*;
    import java.math.*;
    
    public class Main {
        static int k;
        static BigInteger n;
        public static void main(String args[]) {
            Scanner sc=new Scanner(System.in);
            
            k=sc.nextInt();
            n=sc.nextBigInteger();
            
            if(k==1) {
                System.out.println(n);
                return;
            }
            
            
            BigInteger l=BigInteger.ZERO,r=BigInteger.ONE;
            while(r.pow(k).compareTo(n)<=0) {
                l=r;
                r=r.shiftLeft(1);
            }
            
            BigInteger m=null;
            
            while(l.add(BigInteger.ONE).compareTo(r)<0) {
                m=(l.add(r)).shiftRight(1);
                int res=m.pow(k).compareTo(n);
                if(res<=0) {
                    l=m;
                }
                else {
                    r=m;
                }
                //System.gc();
            }
            
            if(l.pow(k).compareTo(n)<=0)
                System.out.println(l);
            else
                System.out.println(r);
            sc.close();
        }
        
    }
  • 相关阅读:
    项目管理和项目群管理的区别
    项目群管理
    PRINCE2如何完善PMBOK和您的PMP资格证书?
    为什么需要prince2项目管理方法论?
    PMP和PRINCE2到底有什么区别?哪个含金量更高?
    同步和异步
    Promise理解
    async和await实现异步的同步等待
    Mysql数据库操作基础步骤
    PHP和javascript区别
  • 原文地址:https://www.cnblogs.com/Yinku/p/10660594.html
Copyright © 2011-2022 走看看