codevs 3119 高精度练习之大整数开根 (各种高精+压位)
- /*
- codevs 3119 高精度练习之大整数开根 (各种高精+压位)
- 二分答案 然后高精判重 打了一个多小时.....
- 最后还超时了...压位就好了
- 测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
- 测试点#2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
- 测试点#3.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
- 测试点#4.in 结果:AC 内存使用量: 256kB 时间使用量: 10ms
- 测试点#5.in 结果:AC 内存使用量: 256kB 时间使用量: 56ms
- */
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #define maxn 1010
- #define ll long long
- #define bas 100000000
- #define mem(a,b) for(ll i=0;i<=len;i++)a[i]=b[i];
- #define mes(a) for(ll i=0;i<=len;i++)a[i]=0;
- using namespace std;
- ll len,a[maxn],l[maxn],r[maxn],mid[maxn],ans[maxn],x[maxn];
- char s[maxn];
- ll max(ll x,ll y){
- return x>y?x:y;
- }
- void plu(ll a[maxn],ll b[maxn]){
- ll c[maxn];mes(c);
- c[]=max(a[],b[]);
- for(int i=;i<=c[];i++){
- c[i]+=a[i]+b[i];
- if(c[i]>=bas){
- c[i+]++;c[i]%=bas;
- }
- }
- if(c[c[]+])c[]++;
- mem(mid,c);
- }
- void Plu(ll a[maxn],ll b){
- ll p=,c[maxn];mes(c);
- mem(c,a);c[p]++;
- while(c[p]>=bas){
- c[p]%=bas;c[p+]++;p++;
- }
- if(c[c[]+])c[]++;
- mem(l,c);
- }
- void miu(ll a[maxn],ll b){
- ll p=,c[maxn];mes(c);
- mem(c,a);c[p]--;
- while(c[p]<){
- c[p]+=bas;c[p+]--;p++;
- }
- if(c[c[]]==)c[]--;
- mem(r,c);
- }
- void mul(ll a[maxn],ll b[maxn],ll c[maxn]){
- for(int i=;i<=a[];i++){
- for(int j=;j<=b[];j++){
- c[i+j-]+=a[i]*b[j];
- if(c[i+j-]>=bas){
- c[i+j]+=c[i+j-]/bas;
- c[i+j-]%=bas;
- }
- }
- ll len=i+b[];
- while(c[len]>=bas){
- c[len+]+=c[len]/bas;
- c[len]%=bas;len++;
- }
- }
- for(int i=a[]+b[];i>=;i--)
- if(c[i]){
- c[]=i;break;
- }
- }
- void div(ll a[maxn],ll b){
- ll c[maxn];mes(c);
- for(int i=a[];i>=;i--){
- c[i]=a[i+]%b*bas+a[i];
- c[i]=c[i]/b;
- }
- for(int i=a[];i>=;i--)
- if(c[i]){
- c[]=i;break;
- }
- mem(a,c);
- }
- bool cmp(ll a[maxn],ll b[maxn]){
- if(a[]>b[])return ;
- if(a[]<b[])return ;
- for(ll i=a[];i>=;i--){
- if(a[i]>b[i])return ;
- if(a[i]<b[i])return ;
- }
- return ;
- }
- bool Judge(){
- memset(x,,sizeof(x));
- mul(mid,mid,x);
- return cmp(x,a);
- }
- int main()
- {
- scanf("%s",s);
- a[]=strlen(s);len=a[];
- for(int i=;i<=a[];i++)
- a[i]=s[a[]-i]-'';
- for(int i=;i<=len;i+=)
- x[++x[]]=a[i+]*+a[i+]*+a[i+]*+
- a[i+]*+a[i+]*+a[i+]*+a[i+]*+a[i];
- mem(a,x);
- mem(r,a);r[]=a[]/+;
- while(cmp(l,r)){
- plu(l,r);
- div(mid,);
- if(Judge()){
- mem(ans,mid);
- Plu(mid,);
- }
- else miu(mid,);
- }
- printf("%lld",ans[ans[]]);
- for(ll i=ans[]-;i>=;i--)
- printf("%08lld",ans[i]);
- return ;
- }
codevs 3119 高精度练习之大整数开根 (各种高精+压位)的更多相关文章
- [code3119]高精度练习之大整数开根
试题描述 给出一个正整数n,求n开根号后的整数部分的值.n的位数不超过1000位. 输入 读入一个不超过1000位的正整数n. 输出 输出所求答案 输入示例 17 输出示例 4 高精度开根:需要 ...
- codevs 3123 高精度练习之超大整数乘法
fft. #include<iostream> #include<cstdio> #include<cstring> #include<complex> ...
- 大整数类BIGN的设计与实现 C++高精度模板
首先感谢刘汝佳所著的<算法竞赛入门经典>. 众所周知,C++中储存能力最大的unsigned long long 也是有着一个上限,如果我们想计算非常大的整数时,就不知所措了,所以,我写了 ...
- Ural 1158. Censored! 有限状态自动机+DP+大整数
Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用 ...
- COJ 1211 大整数开平方
手写求大整数开根号所得到的值,具体计算过程参考别人的资料,最后利用java的大整数得到答案 别人博客链接:http://www.cnblogs.com/Rinyo/archive/2012/12/16 ...
- 原生js数值开根算法
不借助Math函数求开根值 1.二分迭代法求n开根后的值 思路: left=0 right=n mid=(left+right)/2 比较mid^2与n大小 =输出: >改变范围,right=m ...
- POJ 1001 解题报告 高精度大整数乘法模版
题目是POJ1001 Exponentiation 虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...
- BZOJ 高精度开根 JAVA代码
晓华所在的工作组正在编写一套高精度科学计算的软件,一些简单的部分如高精度加减法.乘除法早已写完了,现在就剩下晓华所负责的部分:实数的高精度开m次根.因为一个有理数开根之后可能得到一个无理数,所以这项工 ...
- Java高精度基础+开根
在焦作站的acm网络赛中遇到了一个高精度开根的水题--但是那时候WA了 后面学写java补题还T了orz 所以写一篇文章来记录一下java的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...
随机推荐
- List Of All Machine Learning Sorted By Citation
List Of All Machine Learning Sorted By Citation With > 300 citations 2013-10-10 See Citation Anal ...
- js中常用framesetiframe页面跳转传参方法实例大全
logf的空间
- 关于C51内的code,idata,xdata
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- Delphi_OD_代码_调试_Delphi反调试技术(以OD为例附核心原代码)
1.程序窗口[chuang kou]句柄[ju bing]检测原理:用FindWindow函数[han shu]查找[cha zhao]具有相同窗口[chuang kou]类名和标题的窗口[chuan ...
- Android AlertDialog更改标题颜色,字体等
更改AlertDialog标题的方法google目前没有提供,只能通过其他办法 一种办法是:首先在源代码中找到有个叫AlertController的类,这个类就是AlertDialog的实现类,是没有 ...
- 【HDOJ】1466 计算直线的交点数
找了个规律. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 21 ...
- java学习面向对象之内部类
什么是面向对象内部类呢?所谓的内部类,即从字面意义上来理解的话,就是把类放到类当中. 那么内部类都有什么特点呢? 1.内部类可以访问包裹他的类的成员. 2.如果包裹他的类想访问被其包裹的类的话就得实例 ...
- 常见的Robotium测试的问题总结:
常见的Robotium测试的问题总结:(从别处拿来的先mark一下) 1.Robotium的 测试类ActivityInstrumentationTestCase2继承了TestCase类,即robo ...
- delphi调用webservice 转
如今 Web Service 已越来越火了,在DotNet已开发的Web Service中,Delphi 7如何方便的调用DotNet写的Web Service呢?方法有两种,一种是在Delphi ...
- DD-WRT相关资源
版本网站下载:Other Downloads,进入betas->2014 FTP下载:如ftp://ftp.dd-wrt.com/betas/2014/06-23-2014-r24461/ Re ...