vijos P1375 大整数(高精不熟的一定要做!)
/*
我尼玛这题不想说啥了
亏了高精写的熟.....
加减乘除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 大整数(高精不熟的一定要做!)的更多相关文章
- 【老鸟学算法】大整数乘法——算法思想及java实现
算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...
- 无人驾驶—高精地图和V2X
高精地图将厘米级的静态信息传传递给无人车V2X将路况上的动态信息传递给无人车 高精地图的作用 高精地图与传统地图的对比 高精地图与定位的关系 上图左侧是感知到的区域,右侧是高精地图,之后进行拼接获得车 ...
- codevs 3119 高精度练习之大整数开根 (各种高精+压位)
/* codevs 3119 高精度练习之大整数开根 (各种高精+压位) 二分答案 然后高精判重 打了一个多小时..... 最后还超时了...压位就好了 测试点#1.in 结果:AC 内存使用量: 2 ...
- 大整数因子(高精mod)
大整数的因子 总时间限制: 1000ms 内存限制: 65536kB 描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. 输入 一个非 ...
- 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 首先, 我会说不保证你在使用者模式 ( ...
- POJ 1001 解题报告 高精度大整数乘法模版
题目是POJ1001 Exponentiation 虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...
- noip 2012 国王游戏(贪心+高精)
/* 我是不会说我考试的时候想到了正解却把金币取大看成金币求和的.... 觉得只按左右手乘积排序不太对 有反例 也可能我反例放到这个题里是错的吧 按自己的理解排的序 就是各种讨论... 假设 第i个人 ...
- 大整数算法[11] Karatsuba乘法
★ 引子 前面两篇介绍了 Comba 乘法,最后提到当输入的规模很大时,所需的计算时间会急剧增长,因为 Comba 乘法的时间复杂度仍然是 O(n^2).想要打破乘法中 O(n^2) ...
- 大整数算法[09] Comba乘法(原理)
★ 引子 原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现.实现的话相对复杂,要用到内联汇编,要考虑不同平台等等. 在大整数计算中,乘法是非常重要的,因为 ...
随机推荐
- 黑马程序员—C语言的特点和关键字
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- C语言的简介 一. C语言具有下列特点: C语言既具有低级语言直接操纵硬件的特点,又具有高级语言 ...
- How to solve "The specified service has been marked for deletion" error
There may be several causes which lead to the service being stuck in “marked for deletion”. Microsof ...
- Find The Multiple(poj 1426)
Description Given a positive integer n, write a program to find out a nonzero multiple m of n whose ...
- struts配置时遇到的几个问题
1. struts在配置文件的时候,如果package包继承为 :extends="json-default" ,那么项目中要引入struts2-json-plugin-xxx.j ...
- PSoC电容式触摸感应技术
PSoC是由Cypress半导体公司推出的具有数字和模拟混合处理能力的可编程片上系统芯片,某些系列的PSoC(如CY8C21X34系列),由于其内部配备的特殊资源,使得它可以很容易地实现电容式触摸感应 ...
- input 标签左对齐
不要忘记下载jquery包,并引用到工程文件里. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ...
- Maven实战一
转载:http://www.iteye.com/topic/1123221 1. 用Maven 命令创建一个简单的Maven项目 在cmd中运行如下命令: Cmd代码 mvn archetype:ge ...
- Android 批量上传sd卡图片
最近手头上需要批量上传一些保存到SD卡图片由于简单,过于忘记,写在博客中吧!同时也希望能帮到大家! 一 . 以下是一个Service类 package cn.com.service; import j ...
- (转载)HTML标签<br><br/>的区别在哪里?
(转载)http://zhidao.baidu.com/question/259205863.html HTML标签<br><br/>的区别在哪里? 如果一样为什么还要分2个标 ...
- Spfa费用流模板
; ,maxm=; ,fir[maxn],nxt[maxm],to[maxm]; int cap[maxm],val[maxm],dis[maxn],path[maxn]; void add(int ...