【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的路径有多少条……这样转移. ...
随机推荐
- 004 Numpy
一:Numpy介绍 1.简介 Numerical Python 就是数值python包,是python进行科学计算的一个基础包,因此要更好的理解与掌握python科学计算包,尤其是pandas,需要先 ...
- 关于谷歌浏览器62版本之后引用video.js不能自动播放的问题(Cross-origin plugin content from http://vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf must have a visible size larger than 400 x 300 pixels, or it will be blocked.)
Cross-origin plugin content from http://vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf must have a visibl ...
- poj-2777线段树刷题
title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...
- “公共语言规范”(CLS)
一.什么是“公共语言规范”(CLS) 定义了一个最小公共集,任何编译器只有支持这个功能集,生成的类型才能兼容其他符合CLS.面向CLR的语言生成的组件 二.CLS规则 类型的每个成员要么是字段(数据) ...
- Top 5 SSH Clients for Windows (Alternatives of PuTTY)
这篇博文列举了可以替代putty的5个工具,有些实现了putty没有实现的一些功能.如下: PuTTy is the most popular SSH clients for Windows-base ...
- interrupt_control
中断的概念CPU在处理过程中,经常需要同外部设备进行交互,交互的方式由“轮询方式”“中断方式” 轮询方式: 方式:在同外设进行交互的过程中,CPU每隔一定的时间状态就去查询相关的状态位,所以在交互期间 ...
- 学好js,这些js函数概念一定要知道
函数创建方式 1.声明方式 例如:function consoleTip (){ console.log("tip!"); } 2.表达式方式 例如:var consoleTip ...
- php开启memcache扩展
1.下载memcache.dll(php7)https://github.com/nono303/PHP7-memcahe-dll/tree/master 2.将dll文件放到php7/ext目录下 ...
- sublime插件FileHeader使用,自动的添加模板
sublime插件FileHeader能够自动的监测创建新文件动作,自动的添加模板 下载地址:https://github.com/shiyanhui/FileHeader FileHeader能够自 ...
- 单链表之一元多项式求和C++实现
单链表之一元多项式求和 一元多项式求和单链表实现伪代码 1.工作指针 pre.p.qre.q 初始化2.while(p 存在且 q 存在)执行下列三种情况之一: 2.1.若 p->exp < ...