洛谷 P2152 [SDOI2009]SuperGCD (高精度)
这道题直接写了我两个多小时……
主要是写高精度的时候还存在着一些小毛病,调了很久
在输入这一块卡了很久。
然后注意这里用while的形式写,不然会炸
最后即使我已经是用的万进制了,但是交上去还是有两个点超时
然后就开始漫长的改进,一直过不了那两个点。
然后突然发现,貌似这道题没有涉及到乘法。
那不就可以直接开10的九次方为一位了(10的9次方是int的最大数量级)
我交上去之后就AC了,全部测试点交上去总和4.6秒
然后原来我一个数开的是2500这么大,因为题目给的10000位,之前用万进制除以4就是2500
然后我现在改成了1200,大约是10000除以9
然后……
交上去总和3秒
直接快了一秒多
而且单个测试点最多也就0.7秒,而这道题的最大限制是2s
看来省空间的时候时间也省了很多
#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXN = 1200;
const int base = 1e9;
struct bignum
{
int len, s[MAXN];
bignum() { len = 0; memset(s, 0, sizeof(s)); }
};
bignum operator - (bignum a, const bignum& b)
{
for(int i = a.len; i >= 1; i--)
{
a.s[i] -= b.s[i];
if(a.s[i] < 0) a.s[i+1]--, a.s[i] += base;
}
while(!a.s[a.len] && a.len > 0) a.len--;
return a;
}
bool judge(bignum a, bignum b) //这种写法很简略
{
if(a.len != b.len) return a.len > b.len;
for(int i = a.len; i >= 1; i--)
if(a.s[i] != b.s[i]) return a.s[i] > b.s[i];
return true;
}
bignum operator % (bignum a, bignum b)
{
while(judge(a, b)) a = a - b;
return a;
}
char str[10000 + 5];
void read(bignum& a) //这个输入代码写了好久
{
scanf("%s", str);
reverse(str, str + strlen(str)); //先翻转在说
int& len = a.len = 0;
for(int i = 0, w; i < strlen(str); i++, w *= 10)
{
if(i % 9 == 0) len++, w = 1;
a.s[len] += w * (str[i] - '0');
}
}
void print(bignum a)
{
printf("%d", a.s[a.len]);
for(int i = a.len - 1; i >= 1; i--)
printf("%09d", a.s[i]);
puts("");
}
int main()
{
bignum a, b, c;
read(a); read(b);
while(b.len) //规定len = 0时值为0
{
c = a % b;
a = b;
b = c;
}
print(a);
return 0;
}
洛谷 P2152 [SDOI2009]SuperGCD (高精度)的更多相关文章
- 洛谷 P2152 [SDOI2009]SuperGCD
题意简述 求两个整数a,b的最大公约数0 < a , b ≤ 10 ^ 10000. 题解思路 如果 a % 2 == 0 && b % 2 == 0 gcd(a,b) = gc ...
- 洛谷 2152 [SDOI2009]SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要 ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- BZOJ1880或洛谷2149 [SDOI2009]Elaxia的路线
BZOJ原题链接 洛谷原题链接 显然最长公共路径是最短路上的一条链. 我们可以把最短路经过的边看成有向边,那么组成的图就是一张\(DAG\),这样题目要求的即是两张\(DAG\)重合部分中的最长链. ...
- 洛谷P2148 [SDOI2009]E&D(博弈论)
洛谷题目传送门 先安利蒟蒻仍在施工的博弈论总结 首先根据题目,石子被两两分组了,于是根据SG定理,我们只要求出每一组的SG值再全部异或起来就好啦. 把每一对数看成一个ICG,首先,我们尝试构造游戏的状 ...
- BZOJ1227或洛谷2154 [SDOI2009]虔诚的墓主人
BZOJ原题链接 洛谷原题链接 又是扫描线,题解可看大佬的博客(太懒了不想打) #include<cstdio> #include<algorithm> using names ...
- BZOJ1228或洛谷2148 [SDOI2009]E&D
BZOJ原题链接 洛谷原题链接 完全不会呀.. 写了这题才知道\(SG\)函数原来也能打表找规律... 题解请看大佬的博客 #include<cstdio> using namespace ...
- BZOJ1226或洛谷2157 [SDOI2009]学校食堂
BZOJ原题链接 洛谷原题链接 注意到\(B[i]\)很小,考虑状压\(DP\). 设\(f[i][j][k]\)表示前\(i - 1\)个人已经拿到菜,第\(i\)个人及其后面\(7\)个人是否拿到 ...
- [洛谷P1972][SDOI2009]HH的项链
题目大意:给你一串数字,多次询问区间内数字的种类数 题解:莫队 卡点:洛谷数据加强,开了个$O(2)$ C++ Code: #include <cstdio> #include <a ...
随机推荐
- Windows下PHP服务nginx不能使用file_get_contents的原因
注意:本文为转载,原文链接:Windows下PHP服务nginx不能使用file_get_contents/curl/fopen的原因! 一.问题说明 在Windows环境下搭建了一个本地开发服务环境 ...
- Windows使用docker打开新窗口error解决办法
环境 win7 Error: error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.26/containers/json ...
- bilibili用户信息查询
bilibili用户信息查询 http://space.bilibili.com/ajax/member/GetInfo?mid= 后缀为用户mid号 # -*- coding:utf-8 -*- # ...
- 数据操作的封装--sqlhelper
为了提高软件的灵活性和可维护性,软件的代码须要科学的管理.我们引入了架构这个词.设计模式提醒我们,软件中反复性的代码须要封装起来. 近期在做收费系统时.须要和数据库进行频繁的联系.既然是反复的使用,就 ...
- 深刻理解Java中的String、StringBuffer和StringBuilder的差别
声明:本博客为原创博客,未经同意.不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(链接为http://blog.csdn.net/bettarwang/article/detai ...
- 英语发音规则---H字母
英语发音规则---H字母 一.总结 一句话总结: 1.H发[h]音? hot [hɒt] adj. 热的 house [haʊs] n. 住宅 head [hed] n. 头:头痛 hat [hæt] ...
- 杂项-DB:DW/DWH(数据仓库)
ylbtech-杂项-DB:DW/DWH(数据仓库) 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH.数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合. ...
- Java-MyBatis-杂项:MyBatis根据数组、集合查询
ylbtech-Java-MyBatis-杂项:MyBatis根据数组.集合查询 1.返回顶部 1. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的 ...
- ubuntu 14.04开机出现错误“Error found when loading /root/.profile”解决
在刚修改完root权限自动登录后,发现开机出现以下提示: Error found when loading /root/.profile stdin:is not a tty ………… 解决方法:在终 ...
- 搭建简单的Habernate环境(一)
一.开篇 下载Habernate所需要的jar包和mysql驱动. 二.建立java项目并且导入所需要的包 三.建立实体类和配置映射文件 user实体类 package testPackage; pu ...