【bzoj1876】[SDOI2009]SuperGCD(高精度)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876
一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题。
md还要压位。。
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 100010
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
const int base=;
struct Bignum{
int len;
int num[];
friend bool operator < (Bignum a,Bignum b){
if(a.len!=b.len)return a.len<b.len;
for(int i=a.len;i;i--)
if(a.num[i]!=b.num[i])return a.num[i]<b.num[i];
return ;
}
friend Bignum operator - (Bignum a,Bignum b){
Bignum c;
memset(&c,,sizeof(c));
for(int i=;i<=a.len;i++){
if(a.num[i]<b.num[i])a.num[i]+=base,--a.num[i+];
c.num[i]=a.num[i]-b.num[i];
}
c.len=a.len;
while(c.len>&&!c.num[c.len])--c.len;
return c;
}
friend Bignum operator * (Bignum a,int b){
Bignum c;
memset(&c,,sizeof(c)); ll tmp=;
for(int i=;i<=a.len;i++){
tmp+=a.num[i]*b;
c.num[i]=tmp%base; tmp/=base;
}
c.len=a.len;
for(;tmp;tmp/=base)c.num[++c.len]=tmp%base;
return c;
}
friend Bignum operator / (Bignum a,int b){
Bignum c;
memset(&c,,sizeof(c)); ll tmp=;
for(int i=a.len;i;i--){
tmp=tmp*base+a.num[i];
c.num[i]=tmp/b; tmp%=b;
}
c.len=a.len;
while(c.len>&&!c.num[c.len])--c.len;
return c;
}
void print(Bignum a){
printf("%d",a.num[a.len]);
for(int i=a.len-;i;i--)
printf("%09d",a.num[i]);
printf("\n");
}
}a,b;
char A[],B[];
int n,m;
Bignum gcd(Bignum a,Bignum b)
{
int cnt=;
while(){
if(a<b){
Bignum tmp; tmp=a; a=b; b=tmp;
}
if(b.len==&&b.num[]==)break;
if(a.num[]&){
if(b.num[]&){
Bignum tmp; tmp=b; b=a-b; a=tmp;
}
else b=b/;
}
else{
if(b.num[]&)a=a/;
else ++cnt,a=a/,b=b/;
}
}
Bignum ans=a;
for(int i=;i<=cnt;i+=)ans=ans*(<<);
for(int i=cnt%;i;i--)ans=ans*;
return ans;
}
int main()
{
scanf("%s",A); n=strlen(A);
scanf("%s",B); m=strlen(B);
a.len=b.len=;
for(int i=n-;i>=;i-=){
a.num[++a.len]=;
for(int j=max(i-,);j<=i;j++)
a.num[a.len]=a.num[a.len]*+A[j]-'';
}
for(int i=m-;i>=;i-=){
b.num[++b.len]=;
for(int j=max(i-,);j<=i;j++)
b.num[b.len]=b.num[b.len]*+B[j]-'';
}
Bignum ans=gcd(a,b);
ans.print(ans);
}
bzoj1876
【bzoj1876】[SDOI2009]SuperGCD(高精度)的更多相关文章
- [BZOJ1876][SDOI2009]superGCD(高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1876 分析: 以为辗转相减会TLE呢……但是好像没这个数据……就这么水过去了…… 辗转 ...
- bzoj1876: [SDOI2009]SuperGCD
更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不 ...
- bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于 GCD(a, b) a>b 若 a 为奇数,b 为偶数,GCD ...
- BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】
题目 Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但 ...
- 【BZOJ1876】[SDOI2009]SuperGCD(数论,高精度)
[BZOJ1876][SDOI2009]SuperGCD(数论,高精度) 题面 BZOJ 洛谷 题解 那些说数论只会\(gcd\)的人呢?我现在连\(gcd\)都不会,谁来教教我啊? 显然\(gcd\ ...
- bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2384 Solved: 806[Submit][Sta ...
- BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...
- BZOJ 1876: [SDOI2009]SuperGCD
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3060 Solved: 1036[Submit][St ...
- BZOJ1876:[SDOI2009]SuperGCD——C++高精度良心题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数 ...
随机推荐
- WebApi~通过HttpClient来调用Web Api接口
异步请求 ///<summary> /// HttpClient实现Post请求(异步) /// </summary> static async void dooPost() ...
- FFmpeg总结(六)AV系列结构体之AVPacket
AVPacket位置:libavcodec/avcodec.h下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVqanVubGlu/font/5a6 ...
- 非jsonp解决跨域问题
1.服务器端解决跨域问题:配置filter在filter中设置请求头import java.io.IOException; import javax.servlet.Filter;import jav ...
- ios关于数据的存储
本文转载至http://blog.csdn.net/chen505358119/article/details/9278539 这里我总结了一下数据的存储方式,一是保存在沙盒里 ...
- 参数Slave_IO_Running和Slave_SQL_Running的状态值解析
Slave_SQL_Running: No mysql同步故障解决方法 2010-02-21 16:31:30 标签:mysql 双机 同步 数据库 休闲 原创作品,允许转载,转载时请务必以超链接形 ...
- <2013 08 20> -----澳大利亚博士研究生申请-----
1.澳大利亚昆士兰大学博士的申请一年中什么时间都可以,但奖学金的评选每年只有四轮.和美国不同的是,在提交申请材料之前,个人必须联系好愿意接收你的导师,这个可以自己套磁联系,也可以和那边学院的小秘联系, ...
- java线程:Atomic(原子)
.何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位.计算机中的Atomic是指不能分割成若干部分的意思.如果一段代码被认为是Atomic,则表示这段代码在执行过程中, ...
- js实现还可输入多少个字
// 还可输入的字数个数 function checkLength(obj, len) { var maxChars = len; if (obj.value.length <= maxChar ...
- [BZOJ3551]Peaks
[BZOJ3551]Peaks BZOJ luogu 建Kruskal重构树,点权为边权 按dfn序建出主席树 倍增找到能跳到的最浅的祖先 主席树查询一下 #include<bits/stdc+ ...
- REST --- Representational State Transfer --- 表现层状态转化
引用:阮一峰的网络日志 如果一个架构符合REST原则,就称它为RESTful架构. 要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组 ...