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的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...
随机推荐
- Flex时间操作
小弟是Flex新手,最近一段时间领导要求使用Flex开发B/S的一些项目,需要用到时间上的一些操作.上网查询一番好多人都说不好操作,有的甚至非常麻烦.基于此,小弟整理了一些关于Flex时间操作的经验, ...
- wcf安全
http://www.cnblogs.com/artech/archive/2011/07/07/customauthorization01.html 安全 http://www.cnblogs.co ...
- git实现版本回退
1. 首先查看自己的版本: ***:~/piaoshifu_object/epiao.piaoshifu.cn$ git log commit c8d5c67861d2d0e21856cc2b4f60 ...
- 同样版本的jstl,都是jstl1.2版本,有个有问题,另一个没有问题
问题是这样的,最近部署一个项目,发现每次访问首页的时候老是报如下的错误: org.springframework.web.util.NestedServletException: Handler pr ...
- EditText的 焦点事件 setOnFocusChangeListener
实现代码: //光标处在EditText时其内容消失 mInfo = (EditText)findViewById(R.id.old_password); //setOnFocusChangeList ...
- Linux下查看CPU信息
在linux操作系统中,CPU的信息在启动的过程中被装载到虚拟目录/proc下的cpuinfo文件中,我们可以通过 cat /proc/cpuinfo 查看一下:
- BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 5 ...
- Google Map API 学习五
今天其实收货很大的 1.InfoWindow google.maps.InfoWindow class An overlay that looks like a bubble and is often ...
- apple ID的重要性
当手机丢失时,您可以将对应的产品码提供给运营商,提高找回丢失手机的可能性. 2.去App store下载“查找我的iPhone(Find My iPhone)”,立刻安上,用你的app ...
- 游戏开发设计模式之命令模式(unity3d 示例实现)
博主才学尚浅,难免会有错误,尤其是设计模式这种极富禅意且需要大量经验的东西,如果哪里书写错误或有遗漏,还请各位前辈指正. 打 算写设计模式的目的就是,首先自己可以理清思路,还有就是国内的设计模式资料很 ...