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开头的形式 ...
随机推荐
- Splay入门解析【保证让你看不懂(滑稽)】
BST真是神奇的东西... 而且种类好多呀... 我这个蒟蒻只学会了splay orzCJ老爷,各种树都会 好好好,不说了,直接说splay. 不知道splay是啥,,你也要知道平衡树是啥... 平衡 ...
- [JZOJ5511] 送你一个DAG
题目描述: 给出一个 \(n\) 个点 \(m\) 条边的 \(DAG\) 和参数 \(k\). 定义一条经过 \(l\) 条边的路径的权值为 \(l^k\). 对于 \(i = 1-n\), 求出所 ...
- [BZOJ1016] [JSOI2008] 最小生成树计数 (Kruskal)
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- 机器学习-kNN
基于Peter Harrington所著<Machine Learning in Action> kNN,即k-NearestNeighbor算法,是一种最简单的分类算法,拿这个当机器学习 ...
- 使用mysql将备份的sql文件导入到数据库
一.背景 承接上一篇文章<如何使用mysqldump备份数据库>,数据库备份后将用于恢复或者在多个测试环境上迁移.下面描述如何通过批处理文件实现数据加载恢复. 二.环境准备 跟上一篇一样, ...
- java枚举类型举例(基础)
enum Mycolor{红色,绿色,蓝色}; public class asd { public static void main(String[] args) { Mycolor[] allcol ...
- windows中安装redis
Redis是有名的NoSql数据库,一般Linux都会默认支持.但在Windows环境中, Windows的Redis安装包需要到以下GitHub链接找到.链接:https://github.com/ ...
- Java中常见的URL问题及解决方案
URL无处不在,不过似乎开发人员并没有真正地理解它们,因为在Stack Overflow上经常看到有人在问如何正确的创建一个URL.想知道URL语法是如何工作的,可以看下兄弟连教育总结的这篇文章,非常 ...
- C语言--第0次作业
1.你认为大学的学习生活.同学关系.师生应该是怎样?请一个个展开描写. 学习生活 大学是一个过渡时间,它不同于高中与社会.我希望自己可以养成自主学习的习惯,也希望能在大学学习中找到属于自己的节奏,不被 ...
- Angular-Mobile介绍
陆续更新中 1. 介绍: * Angular-Mobile是使用Angular和Bootstrap3为手机端网页和App提供支持的前端UI框架.