洛谷 - P2293 - 高精度开根 - 高精度
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();
} }
洛谷 - P2293 - 高精度开根 - 高精度的更多相关文章
- [HNOI2004]高精度开根
题目:洛谷P2293.BZOJ1213. 题目大意:给你$n,k(n\leq 10^{10000},k\leq 50)$,求$\lfloor \sqrt[k]{n}\rfloor$. 解题思路:高精度 ...
- 【BZOJ1213】高精度开根
python是坠吼的! 原题: 不贴原题,就是高精度开根,结果向下取整 首先二分答案,高精度嘛……python即可 二分右端点设为n会T掉,需要先倍增一个r,while(r **m <= n) ...
- BZOJ 1213: [HNOI2004]高精度开根
二次联通门 : BZOJ 1213: [HNOI2004]高精度开根 正解 NTT+高精+倍增+二分 但是可以用python 2333333 m,n=int(raw_input()),int(raw_ ...
- BZOJ 高精度开根 JAVA代码
晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得到一个无理数,所以这项工 ...
- Yroot of High-Precisions (luogu P2293 [HNOI2004]高精度开根)
Background\text{Background}Background I've accepted\text{I've accepted}I've accepteda very good prob ...
- 洛谷P2293 高精开根
锣鼓2293 写完了放代码 应该没什么思维难度 ———————————————————————————————————————————————————————— python真香 m=input() ...
- 洛谷 P2152 [SDOI2009]SuperGCD (高精度)
这道题直接写了我两个多小时-- 主要是写高精度的时候还存在着一些小毛病,调了很久 在输入这一块卡了很久. 然后注意这里用while的形式写,不然会炸 最后即使我已经是用的万进制了,但是交上去还是有两个 ...
- 【洛谷】P1009 阶乘之和——高精度算法
题目描述 用高精度计算出S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...
- 洛谷P1781——宇宙总统(高精度排序)
题目描述 地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竟选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入输出格式 输入格式: 第一行为一个整数n,代表竞选 ...
随机推荐
- Win7 VNC远程连接Centos桌面
一,安装Linux桌面: yum -y groupinstall Desktop yum -y groupinstall "X Window System" yum -y grou ...
- linux字符设备驱动程序框架(老方法)
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #inclu ...
- 使用网络监视器(IRSI)捕捉和分析协议数据包
转载请注明原地址. 实验名称: 理解子网掩码.网关和ARP协议的作用 一.实验目的和要求 (1) 熟悉IRIS的使用 (2) 验证各种协议数据包格式 (3) 学会捕捉并分析各 ...
- Oracle db中禁止使用sqlplus的方法
先记录下来: How to Disable a SQL*Plus Connection for a User (文档 ID 124121.1)
- Cocoa root class
问题来源: 常见面试问题之: NSObject和NSObject protocol有什么区别,为什么要有NSObject protocol, 有没有不继承自NSObject的类? 虽然在iOS开发过程 ...
- HDU 2955 Robberies(01背包变形)
Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Hadoop之HDFS文件操作
摘要:Hadoop之HDFS文件操作常有两种方式.命令行方式和JavaAPI方式.本文介绍怎样利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件 命令行 Java API HD ...
- MySQL的简单优化
一.如何发现需要优化的SQL 主要使用MySQL的慢查日志对有效率问题的SQL进行监控 第一步:启动慢查日志的监控 打开开关,将未使用索引的查询记录到慢查日志中 设置查询时间,当查询时间大于这个值,就 ...
- 20170225-第三件事:FR0002测试
第三件事:FR0002测试 MATNR WERKS BERID 800000217 I010 问题,上for all entrys… 1 ...
- POJ2135 Farm Tour —— 最小费用最大流
题目链接:http://poj.org/problem?id=2135 Farm Tour Time Limit: 1000MS Memory Limit: 65536K Total Submis ...