【BZOJ】【1876】【SDOI2009】SuperGCD
高精度+GCD
唔……高精gcd其实可以这么算:
\[ GCD(a,b)= \begin{cases} a & b=0 \\ 2*GCD(\frac{a}{2},\frac{b}{2}) & a\mod 2=0,b \mod 2=0 \\ GCD(\frac{a}{2},b) & a\mod 2=0,b \mod 2=1 \\ GCD(a,\frac{b}{2}) & a\mod 2=1,b \mod 2=0 \\ GCD(b,a-b) & else \end{cases} \]
然而Windows下栈空间只有8M坑爹啊……本地根本不能跑大数据。。。然后一直挂……
只好把大部分操作都改成void类型,并且传引用,然后把gcd的过程改成对全局变量进行操作……并不传参数……
各种乱搞一气终于是过了这道模板题……sad
/**************************************************************
Problem: 1876
User: Tunix
Language: C++
Result: Accepted
Time:1860 ms
Memory:1556 kb
****************************************************************/ //BZOJ 1876
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=;
/*******************template********************/ struct bint{
int v[N];
int l;
bint(){l=; memset(v,,sizeof v);}
int& operator [] (int x){return v[x];}
}a,b,r,t; const int Limit=;
//const LL Limit=10000000000000000LL;
//1e16
void print(bint a){
printf("%d",a[a.l]);
D(i,a.l-,) printf("%09d",a[i]);
puts("");
}
bint operator - (bint a,bint b){
F(i,,a.l){
a[i]-=b[i];
if (a[i]<) a[i]+=Limit,a[i+]--;
}
while(a.l && a[a.l]==) a.l--;
return a;
}
void div2(bint& a){
F(i,,a.l){
if (a[i]&) a[i-]+=Limit/;
a[i]>>=;
}
while(a.l && a[a.l]==) a.l--;
} void mul2(bint &a){
D(i,a.l,){
a[i]<<=;
a[i+]+=a[i]/Limit;
a[i]%=Limit;
}
while (a[a.l+]>) a.l++;
}
bool operator < (bint a,bint b){
if (a.l!=b.l) return a.l<b.l;
D(i,a.l,){
if (a[i]!=b[i]) return a[i]<b[i];
}
return ;
}
void gcd(){
if (b.l==){
r=a; return;
}
if (!(a[]&) && !(b[]&)){
div2(a),div2(b); gcd(); mul2(r); return;
}
if (!(a[]&) && (b[]&)){
div2(a); gcd(); return;
}
if ((a[]&) && !(b[]&)){
div2(b); gcd(); return;
}
if (a<b) swap(a,b);
t=b; b=a-b; a=t;
gcd();
}
char s1[],s2[]; int main(){
#ifndef ONLINE_JUDGE
freopen("1876.in","r",stdin);
freopen("1876.out","w",stdout);
#endif
scanf("%s%s",s1+,s2+);
int l1=strlen(s1+),l2=strlen(s2+);
a.l=l1/+bool(l1%);
b.l=l2/+bool(l2%);
F(i,,a.l){
int k1=max(,l1-i*+),k2=l1-(i-)*;
F(j,k1,k2) a[i]=a[i]*+s1[j]-'';
}
F(i,,b.l){
int k1=max(,l2-i*+),k2=l2-(i-)*;
F(j,k1,k2) b[i]=b[i]*+s2[j]-'';
}
gcd();
print(r);
return ;
}
1876: [SDOI2009]SuperGCD
Time Limit: 4 Sec Memory Limit: 64 MB
Submit: 1826 Solved: 589
[Submit][Status][Discuss]
Description
数)!因此他经常和别人比赛计算GCD。有一天Sheng bill很嚣张地找到了你,并要求和你比
赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个程序来教训他。
Input
第一行:一个数A。
第二行:一个数B。
Output
Sample Input
54
Sample Output
HINT
对于20%的数据,0 < A , B ≤ 10 ^ 18。
对于100%的数据,0 < A , B ≤ 10 ^ 10000。
Source
【BZOJ】【1876】【SDOI2009】SuperGCD的更多相关文章
- 【BZOJ 2754 喵星球上的点名】
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2512 Solved: 1092[Submit][Status][Discuss] Descript ...
- 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂
[题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【SDOI2009】解题汇总
又开了波专题,感觉就和炉石开冒险一样...(说的好像我有金币开冒险似的) /---------------------------------------------/ BZOJ-1226 [SDOI ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】【1025】【SCOI2009】游戏
DP/整数拆分 整个映射关系可以分解成几个循环(置换群的预备知识?),那么总行数就等于各个循环长度的最小公倍数+1(因为有个第一行的1~N).那么有多少种可能的排数就等于问有多少种可能的最小公倍数. ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3697】采药人的路径&【3127】【USACO2013 Open】Yin and Yang
点分治 Orz hzwer 倒是比较好想到点分治……然而在方案统计这里,我犯了两个错误…… 1.我比较傻逼的想的是:通过儿子来更新父亲,也就是统计以x为根的子树中xxxx的路径有多少条……这样转移. ...
随机推荐
- Ionic Js二:背景层
我们经常需要在 UI 上,例如在弹出框.加载框.其他弹出层中显示或隐藏背景层. 在组件中可以使用\(ionicBackdrop.retain()来显示背景层,使用\)ionicBackdrop.rel ...
- maven的统一版本管理实践
为什么要使用maven的统一版本管理? 在进行项目开发的时候,我们使用maven来做项目的构建和管理.为了方便项目中各个模块之间的复用,项目通常会有多个模块构成.不同的模块,会各自应用自己需要的jar ...
- iOS 9应用开发教程之编辑界面与编写代码
iOS 9应用开发教程之编辑界面与编写代码 编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main.storyboard文件就 ...
- 开始一个Django项目的简单方法
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名(你 ...
- java知识回顾
一.构造方法能不能被继承 当然不能,1.构造方法是类的唯一入口 2.构造方法与类名相同 3.子类构造方法中隐式的调用了父类的构造方法 二.值传递和引用传递.不变类和可变类.直接赋值和浅拷贝和深拷贝 ...
- zoj 3157 Weapon 逆序数/树状数组
B - Weapon Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Sta ...
- Windows下Python版本的切换
通常在Windows系统下我们可能安装了多个Python版本,那么该如何进行版本的切换呢?下面就Python2.7与Python3.0版本进行简单说明. 1.首先需要在Windows上安装Python ...
- EXPLAIN 用法
重点是第二种用法,需要深入的了解. 先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+--- ...
- Spring_Task初探(注解,XML配置)
这几天想写一个动态添加任务项目找了找Spring下的自带定时功能发现还真有,然后网上找了找资料写了个demo 写了两种方式来执行定时的任务(XML配置和注解) 先建两个普通的任务类(XML配置调用的任 ...
- Bootstrap_表格
Bootstrap 表格 Bootstrap 提供了一个清晰的创建表格的布局.下表列出了 Bootstrap 支持的一些表格元素: 标签 描述 <table> 为表格添加基础样式. < ...