bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD
http://www.lydsy.com/JudgeOnline/problem.php?id=1876
高精压位GCD
对于 GCD(a, b) a>b
若 a 为奇数,b 为偶数,GCD(a, b) = GCD(a, b / 2)
若 a 为偶数,b 为奇数,GCD(a, b) = GCD(a / 2, b)
若 a 为偶数,b 为偶数,GCD(a, b) = 2*GCD(a / 2, b / 2)
若 a 为奇数,b 为奇数,GCD(a, b) = GCD(a - b, b)
vector 压8位 是 压4位 用时的一半
vector 写 高精 真心 方便
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream> using namespace std; #define N 100000000 typedef vector<int> bignum; inline bignum read()
{
bignum a;
string s,ss;
cin>>s;
reverse(s.begin(),s.end());
while(s.size()>)
{
ss=s.substr(,);
a.push_back(ss[]+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*-*);
s=s.substr(,s.size());
}
int b=;
reverse(s.begin(),s.end());
for(int i=;i<s.size();++i) b=b*+s[i]-;
a.push_back(b);
return a;
} inline bool bigger(bignum a,bignum b)
{
if(a.size()>b.size()) return true;
if(a.size()<b.size()) return false;
for(int i=a.size()-;i>=;--i)
{
if(a[i]>b[i]) return true;
if(a[i]<b[i]) return false;
}
return false;
} inline bool iseven(bignum a)
{
return !(*a.begin()&);
} inline bool iszero(bignum a)
{
return a.size()== && !(*a.begin());
} inline void delzero(bignum &a)
{
while(a.size()>)
{
bignum::iterator it=--a.end();
if(*it) break;
a.erase(it);
}
} inline void sub(bignum &a,bignum b)
{
int i;
for(i=;i<b.size();++i)
{
if(a[i]<b[i]) a[i+]--,a[i]+=N;
a[i]-=b[i];
}
while(i<a.size() && a[i]<)
{
a[i]+=N;
++i;
--a[i];
}
delzero(a);
} inline void half(bignum &a)
{
for(int i=a.size()-;i>=;--i)
{
if(a[i]&) a[i-]+=N;
a[i]=a[i]>>;
}
delzero(a);
} inline void doubled(bignum &a)
{
for(int i=;i<a.size();++i)
{
a[i]<<=;
if(i> && a[i-]>=N) a[i-]-=N,a[i]++;
}
bignum::iterator it=--a.end();
if(*it>=N) *it-=N,a.push_back();
} inline void output(bignum a)
{
int i=a.size()-;
printf("%d",a[i]);
if(!i) return;
for(--i;i>=;--i) printf("%08d",a[i]);
} int main()
{
bignum a=read(),b=read();
int c=;
while()
{
if(bigger(b,a)) swap(a,b);
if(iszero(b)) break;
if(iseven(a) && iseven(b))
{
half(a); half(b);
c++;
}
else if(iseven(a)) half(a);
else if(iseven(b)) half(b);
else sub(a,b); }
while(c--) doubled(a);
output(a);
return ;
}
bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战
http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...
- bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...
- bzoj千题计划287:bzoj1228: [SDOI2009]E&D
http://www.lydsy.com/JudgeOnline/problem.php?id=1228 打SG函数表,找规律: 若n是奇数m是奇数,则SG(n,m)=0 若n是偶数m是偶数,则SG( ...
- bzoj千题计划286:bzoj1226: [SDOI2009]学校食堂Dining
http://www.lydsy.com/JudgeOnline/problem.php?id=1226 关键点:一个人只能忍受 ‘紧跟’ 在他 后面的b个人比他先打到饭 dp[i][j][k] 前i ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
随机推荐
- Dubbo 新编程模型之外部化配置
外部化配置(External Configuration) 在Dubbo 注解驱动例子中,无论是服务提供方,还是服务消费方,均需要转配相关配置Bean: @Bean public Applicatio ...
- AC自动机模板1(【洛谷3808】)
题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...
- [BZOJ3224] [Tyvj 1728] 普通平衡树 (treap)
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...
- 测试一下OpenLiveWriter
$$ \sum_{0}^{n} k_i $$ OpenLiveWriter好丑啊啊啊啊,什么鬼?
- 创建和注册自定义 HTTP 模块
本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...
- UWP 使用Telerik Chart控件
Telerik开发的chart功能异常强大 用户可以自行在商店搜索"UI for uwp demos". 下面我就结合以下我的软件,来说明一下饼状图的实现. 看看效果: 先看一下X ...
- 微信小程序快捷键
- PAT 输出华氏-摄氏温度转换表
输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper].且每次增加2华氏度的华氏-摄氏温度转换表. 温度转换的计算公式:C=5×(F−3 ...
- C语言最后一次作业--总结报告
1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当时选择计算机专业,是基于自己的高考分数和想出省的 ...
- ClickOnce清单签名取消后依然读取证书的问题
在 http://www.cnblogs.com/heroius/p/8270004.html 和 http://www.cnblogs.com/heroius/p/8278796.html中,通过编 ...