/*
我尼玛这题不想说啥了
亏了高精写的熟.....
加减乘除max都写了
高精二分
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1010
#define memcpy(a,b); for(int i=0;i<=1000;i++)a[i]=b[i];
using namespace std;
int n[maxn],len,l[maxn],r[maxn],mid[maxn],ans[maxn];
char s[maxn];
void Plus(int a[maxn],int b[maxn]){
int L=max(a[],b[]);
int c[maxn];memset(c,,sizeof(c));
for(int i=;i<=L;i++)
c[i]=a[i]+b[i];
for(int i=;i<=L;i++)
if(c[i]>){c[i+]++;c[i]%=;}
if(c[L+])L++;c[]=L;
memcpy(a,c);
}
void Sub(int a[maxn]){
a[]--;
int p=;
while(a[p]<){
a[p]=;p++;a[p]--;
}
if(a[a[]]==)a[]--;
}
void Mul(int a[maxn],int b[maxn]){
int c[maxn];memset(c,,sizeof(c));
int l1=a[],l2=b[],l3=l1+l2;
for(int i=;i<=l1;i++){
int x=;
for(int j=;j<=l2;j++){
c[j+i-]+=a[i]*b[j]+x;
x=c[i+j-]/;
c[i+j-]=c[i+j-]%;
}
c[i+l2]=x;
}
int k=;
for(int i=l3;i>=;i--)
if(c[i]){k=i;break;}
c[]=k;memcpy(a,c);
}
void Div(int a[maxn],int x){
int b[maxn],c=;memset(b,,sizeof(b));
for(int i=a[];i>=;i--){
b[i]=(c*+a[i])/x;c=a[i]%x;
}
int k=;
for(int i=a[];i>=;i--)
if(b[i]){k=i;break;}
b[]=k;memcpy(a,b);
}
bool Cmp(int a[maxn],int b[maxn]){
if(a[]<b[])return ;
else if(a[]>b[])return ;
for(int i=a[];i>=;i--){
if(a[i]<b[i])return ;
if(a[i]>b[i])return ;
}
return ;
}
void Cal(int x[maxn]){
int a[maxn],b[maxn],c[maxn],d[maxn],e[maxn];
e[]=;e[]=;memset(a,,sizeof(a));
memcpy(b,x);memcpy(c,x);memcpy(d,x);
Mul(b,x);Mul(b,x);Mul(c,x);Mul(d,e);
Plus(a,b);Plus(a,c);Plus(a,d);
memcpy(x,a);
}
bool Judge(int a[maxn]){
int b[maxn];memcpy(b,a);
Cal(b);
return Cmp(b,n);
}
void cal(int a[maxn]){
int b[maxn],c[maxn];
memcpy(b,l);memcpy(c,r);
Plus(b,c);Div(b,);
memcpy(a,b);
}
int main()
{
scanf("%s",s);
len=strlen(s);
for(int i=;i<=len;i++)
n[i]=s[len-i]-'';
n[]=len;
l[]=;r[]=;
for(int i=;i<=;i++)r[i]=;
while(Cmp(l,r)){
cal(mid);int a[maxn];
memset(a,,sizeof(a));
a[]=;a[]=;
if(Judge(mid)){
memcpy(l,mid);
Plus(l,a);
memcpy(ans,mid);
}
else{
memcpy(r,mid);
Sub(r);
}
}
for(int i=max(ans[],);i>=;i--)
printf("%d",ans[i]);
return ;
}

vijos P1375 大整数(高精不熟的一定要做!)的更多相关文章

  1. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  2. 无人驾驶—高精地图和V2X

    高精地图将厘米级的静态信息传传递给无人车V2X将路况上的动态信息传递给无人车 高精地图的作用 高精地图与传统地图的对比 高精地图与定位的关系 上图左侧是感知到的区域,右侧是高精地图,之后进行拼接获得车 ...

  3. codevs 3119 高精度练习之大整数开根 (各种高精+压位)

    /* codevs 3119 高精度练习之大整数开根 (各种高精+压位) 二分答案 然后高精判重 打了一个多小时..... 最后还超时了...压位就好了 测试点#1.in 结果:AC 内存使用量: 2 ...

  4. 大整数因子(高精mod)

    大整数的因子 总时间限制:  1000ms 内存限制:  65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非 ...

  5. Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html

    Linux 高精確的時序(sleep, usleep,nanosleep) (2010-04-14 17:18:26) 转载▼ 标签: 杂谈 分类: linux 首先, 我会说不保证你在使用者模式 ( ...

  6. POJ 1001 解题报告 高精度大整数乘法模版

    题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...

  7. noip 2012 国王游戏(贪心+高精)

    /* 我是不会说我考试的时候想到了正解却把金币取大看成金币求和的.... 觉得只按左右手乘积排序不太对 有反例 也可能我反例放到这个题里是错的吧 按自己的理解排的序 就是各种讨论... 假设 第i个人 ...

  8. 大整数算法[11] Karatsuba乘法

    ★ 引子         前面两篇介绍了 Comba 乘法,最后提到当输入的规模很大时,所需的计算时间会急剧增长,因为 Comba 乘法的时间复杂度仍然是 O(n^2).想要打破乘法中 O(n^2) ...

  9. 大整数算法[09] Comba乘法(原理)

    ★ 引子          原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现.实现的话相对复杂,要用到内联汇编,要考虑不同平台等等. 在大整数计算中,乘法是非常重要的,因为 ...

随机推荐

  1. Start Your Django Project in Nginx with uWsgi

    Step 0:Install A,B,C,blabla needed This can be seen in my another article in the blog.click here(una ...

  2. 开发人员应关注的20个jQuery网站/博客

    http://blog.jobbole.com/1466/ 2.  10个优秀的移动Web应用开发框架 http://blog.jobbole.com/1436/ 3.  介绍jQ Mobile ht ...

  3. 使用CSS3改变选中元素背景色

    CSS3代码如下: /* SELECTION ----------------- */ ::-moz-selection { background: #f00533; color: white; te ...

  4. [转]Aggregate tasks i Sharepoint 2013

    from http://sharepoint247.com/mysite/aggregate-tasks-i-sharepoint-2013/ Aggregate tasks i Sharepoint ...

  5. hdu 5072 Coprime

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出 n 个互不相同的数,求满足以下条件的三元无序组的个数:要么两两互质要么两两不互质. 思路:根据 ...

  6. Squares(哈希)

    Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 14328   Accepted: 5393 Description A sq ...

  7. BestCoder Round #51 (div.2)

    明显是无良心的数学round= = 1000 Zball in Tina Town #include<iostream> #include<cstdio> #include&l ...

  8. hdu-4612-Warm up(边双连通分量--有重边)

    题意:有N 个点,M条边,加一条边,求割边最少.(有重边) 分析:先求双连通分量,缩点形成一个生成树,然后求这个的直径,割边-直径即是答案 因为有的图上可能有重边,这样不好处理.我们记录每条边的标号( ...

  9. 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

  10. sharepoint2007的中文版

    今天终于下载到了sharepoint2007的中文版了,以前微软的测试板也没有中文版,今天终于下载到了,经过测试,用英文版的sn也是可以用的.微软提供的测试版,输入正式的key,就可以变成正式版了.我 ...