bzoj1876 SuperGCD
Description
Input
Output
Stein算法+高精度压位
首先不断约去A,B的公因数2直至A或B为奇数,记录约去2的次数k。
循环执行:{
若A或B为偶数则不断约去2
若A<B则交换A,B
A-=B
若A=0则输出B*2k,算法结束
}
#include<cstdio>
#include<cstring>
#define B 1000000000
const int B9=B-;
char s[];
struct num{
int a[];
int l;
num(){l=;}
inline void div2(){
for(int i=l;i>;i--){
if(a[i]&)a[i-]+=B;
a[i]>>=;
}
a[]>>=;
while(l&&!a[l])--l;
}
inline void mut2(){
for(int i=;i<=l;i++)a[i]<<=;
for(int i=;i<=l;i++)a[i+]+=a[i]/B,a[i]%=B;
if(a[l+])l++;
}
void print(){
printf("%d",a[l]);
for(int i=l-;i>=;i--)printf("%09d",a[i]);
}
}a1,b1;
inline bool operator<(num&a,num&b){
for(int i=a.l<b.l?b.l:a.l;i>=;i--){
if(a.a[i]<b.a[i])return true;
if(a.a[i]>b.a[i])return false;
}
return false;
}
inline bool operator-=(num&a,num&b){
a.a[]+=;
for(int i=a.l;i>=;i--)a.a[i]+=B9-b.a[i];
for(int i=;i<a.l;i++)a.a[i+]+=a.a[i]/B,a.a[i]%=B;
a.a[a.l]%=B;
while(a.l&&!a.a[a.l])--a.l;
}
num*a=&a1,*b=&b1,*c;
int t2=,l;
int p10[]={,,,,,,,,};
int main(){
scanf("%s",s);
l=strlen(s)-;
for(int i=;i<=l;i++)a->a[(l-i)/]+=p10[(l-i)%]*(s[i]-'');
a->l=l/;
if(a->a[a->l+])a->l++;
scanf("%s",s);
l=strlen(s)-;
for(int i=;i<=l;i++)b->a[(l-i)/]+=p10[(l-i)%]*(s[i]-'');
b->l=l/;
if(b->a[b->l+])b->l++;
while(!(a->a[]&)&&!(b->a[]&)){
t2++;
a->div2();
b->div2();
}
do{
while(!(a->a[]&))a->div2();
while(!(b->a[]&))b->div2();
if(*a<*b)c=a,a=b,b=c;
*a-=*b;
}while(a->l!=||a->a[]!=);
while(t2--)b->mut2();
b->print();
return ;
}
bzoj1876 SuperGCD的更多相关文章
- BZOJ-1876 SuperGCD Python(欧几里德算法)
第一次感觉Python艹题的快感 1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MB Submit: 2461 Solved: ...
- 【BZOJ1876】[SDOI2009]SuperGCD(数论,高精度)
[BZOJ1876][SDOI2009]SuperGCD(数论,高精度) 题面 BZOJ 洛谷 题解 那些说数论只会\(gcd\)的人呢?我现在连\(gcd\)都不会,谁来教教我啊? 显然\(gcd\ ...
- 【bzoj1876】[SDOI2009]SuperGCD(高精度)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876 一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题. md还 ...
- [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——C++高精度良心题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数 ...
- BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】
题目 Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但 ...
- BZOJ 1876: [SDOI2009]SuperGCD
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3060 Solved: 1036[Submit][St ...
随机推荐
- String对象中的正则表达式
(1)身份证号码验证身份证号码是18位数字,根据GB11643-1999<公民身份证>定义制作:由17位本体码和一位校验码组成.身份证号码前6位是地址码,按(GB/T2260)规定执行.接 ...
- 全球信息安全会议 Top 50
信息安全会议在世界范围内举办,下面是全球最值得参加的50个信息安全会议的简介,以时间顺序列出.需要注意的是,这份清单基于2016年的信息撰写,因为具体日期与地点每年或有不同,请至活动官网确认具体的日期 ...
- 软工作业No.1。Java实现WC.exe
网址:https://github.com/a249970271/WC WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿已有w ...
- Python 爬虫常用库(九)
- Linux:查看进程运行时间
查看进程运行时间 应用ps命令,加选项-Ao,加参数,最后过滤. ps -Ao pid,tty,user,stime,etime,comm,args| grep firefox pid:进程ID tt ...
- ACCESS表的视图
ACCESS表的视图 点击: 发布日期:2007-8-31 6:37:00 进入论坛 表是关系型数据库的基本结构.在Access中,表是一种关系特定主题的数据集合,如产品.供应商等.为 ...
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...
- Dlib与OpenCV图片转换
re: 1. https://zhuanlan.zhihu.com/p/36489663 2. https://stackoverflow.com/questions/38180410/convert ...
- UVA 156:Ananagrams (vector+map+sort)
题意:一大堆单词中间有空格隔开,以'#'结束输出,问只出现一次的的单词有哪些(如果两个具有相同的长度,相同的字母也算是相同的,不区分大小写,如:noel和lone属于一个单词出现两次).最后按照字典序 ...
- Alternative Thinking 找规律
Kevin has just recevied his disappointing results on the USA Identification of Cows Olympiad (USAICO ...