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的大整数类型的基础和开根还有一点心得体会吧 首先给那一题的题面 ...
随机推荐
- BZOJ 3083 遥远的国度 树链剖分
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 797 Solved: 181[Submit][Status] Descrip ...
- MVC自学系列之四(MVC模型-Models)
ASP.NET MVC 提供了一系列工具和特性去使用仅仅定义的对象模型.你可以坐下来好好思考你将要解决的问题,并且写好C#类,当你准备好时就可以使用MVC提供的工具去为每一个实体构建标准的index. ...
- <转>SFTP 和FTPS的区别是什么?
SFTP 和FTPS都是为ftp连接加密,协议非常相似. 一个是借助ssl协议加密,一个时借助ssh加密. ssl是为http/smtp等加密设计的,ssh是为telnet/ftp等加密.建立传输通道 ...
- HDU --2665
Kth number Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 机器安装第二个tomcat ,出现报错如何解决
1.本机安装第二个 tomcat 后,出现 报错如下图所示 最后解决办法 是 在安装的时候 ,windows 服务名称 和 另一个tomcat 起不一样的 名称就可以了 如下图
- HDOJ/HDU 2550 百步穿杨(注意排序)
Problem Description 时维九月,序属三秋,辽军大举进攻MCA山,战场上两军正交锋.辽军统帅是名噪一时的耶律-James,而MCA方则是派出了传统武将中草药123.双方经过协商,约定在 ...
- [JIT_APP]Java基础知识总结
一.Java语言的基础知识 1. 开发Java语言的公司 美国Sun(Sum Microsystems)公司开发. 2.Java的3个版本 J2SE(Java2 Standard Edition) ...
- ACM_2057
/* 2013暑期多校联合训练 - 80 +高校,300 +队伍,10000元奖金,敬请期待? A + B再次 时间限制:1000/1000 MS(JAVA /其他)内存限制:32768分之32768 ...
- codeforces 421d bug in code
题目链接:http://codeforces.com/problemset/problem/421/D 题目大意:每个人说出自己认为的背锅的两个人,最后大BOSS找两个人来背锅,要求至少符合p个人的想 ...
- Drawing Lines - SGU 135(简单递推)
求N条直线最多能把一个平面分成几部分. 代码如下: ========================================================================== ...