HDU-5050 Divided Land (二进制求GCD)
题目大意:将两个二进制数的GCD用二进制数表示出来。
题目分析:这道题可以用java中的大数类AC。
代码如下:
import java.io*;
import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String agrs[]){
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
for(int i=1;i<=T;++i){
String p=sc.next();
String q=sc.next();
BigInteger a=new BigInteger(p,2);
BigInteger b=new BigInteger(q,2);
a=a.gcd(b);
System.out.print("Case #"+i+": ");
System.out.println(a.toString(2));
}
sc.close();
}
}
不过,也可以用二进制来求GCD。
gcd(a,b)=gcd(a/2,b/2)*2 (a,b均为偶数)
gcd(a,b)=gcd(a,b/2) (a为奇数,b为偶数)
gcd(a,b)=gcd((a-b)/2,b) (a,b均为奇数)
很可惜我用C++没AC,下面是我没AC的代码:
# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
# include<string>
using namespace std; bool isBigger(string p,string q)
{
if(p.length()>q.length()) return true;
else if(p.length()<q.length()) return false;
else{
int len=p.length();
for(int i=len-1;i>=0;--i){
if(p[i]>q[i]) return true;
else if(p[i]<q[i]) return false;
}
}
} string sub(string p,string q)
{
int len=q.length();
for(int i=0;i<len;++i){
if(p[i]>=q[i])
p[i]=p[i]-q[i]+'0';
else{
p[i+1]-=1;
p[i]=p[i]+2-q[i]+'0';
}
}
for(int i=len;i<p.length();++i){
if(p[i]<'0'&&i+1<p.length()){
--p[i+1];
p[i]+=2;
}
}
len=p.length();
while(p[len-1]<='0'&&len>0)
--len;
return p.substr(0,len);
} string f(string p,string q)
{
if(p==q) return p;
if(p=="1") return "1";
if(q=="1") return "1";
int n=p.length(),m=q.length();
if(p[0]=='0'&&q[0]=='0')
return f(p.substr(1,n-1),q.substr(1,m-1))+'0';
else if(p[0]=='1'&&q[0]=='0')
return f(p,q.substr(1,m-1));
else if(p[0]=='0'&&q[0]=='1')
return f(p.substr(1,n-1),q);
else{
if(isBigger(p,q)){
p=sub(p,q);
n=p.length();
return f(p.substr(1,n-1),q);
}else{
q=sub(q,p);
m=q.length();
return f(p,q.substr(1,m-1));
}
}
} int main()
{
int T;
string p,q;
scanf("%d",&T);
for(int i=1;i<=T;++i){
cin>>p>>q;
reverse(p.begin(),p.end());
reverse(q.begin(),q.end());
cout<<"Case #"<<i<<": "<<f(p,q)<<endl;
}
return 0;
}
HDU-5050 Divided Land (二进制求GCD)的更多相关文章
- hdu----(5050)Divided Land(二进制求最大公约数)
Divided Land Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- HDU 5050 Divided Land(进制转换)
题意 给你两个二进制数m,n 求他们的最大公约数 用二进制表示 0<m,n<2^1000 先把二进制转换为十进制 求出最大公约数 再把结果转换为二进制 数比較大要用到大数 ...
- Hdu 5050 Divided Land
题目要求就是做求两个二进制数的gcd,如果是用java的话,这题很简单.但也可以用C++做,只能先给自己留下这个坑了,还在研究c++的做法. import java.math.BigInteger; ...
- HDU - 5050 (大数二进制gcd)
It's time to fight the local despots and redistribute the land. There is a rectangular piece of land ...
- HUD 5050 Divided Land
http://acm.hdu.edu.cn/showproblem.php?pid=5050 题目大意: 给定一个矩形的长和宽,把这个矩形分成若干相等的正方形,没有剩余.求正方形的边长最长是多少. 解 ...
- HDU5050:Divided Land(大数的进制转化与GCD)
题意:给定大数A和B,求gcd.所有数字都是二进制. 思路:先输入字符串,再转化为大数,然后用大数的gcd函数,最后转化为字符串输出. 利用字符串和大数转化的时候可以声明进制,就很舒服的完成了进制转化 ...
- 二进制求最大公约数&&输出二进制
Divided Land Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- hdu 1255 覆盖的面积(求覆盖至少两次以上的面积)
了校赛,还有什么途径可以申请加入ACM校队? 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)
[洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...
随机推荐
- office2007-安装程序找不到office.zh-cn\*.文件
在同时安装vs2008 和 office2007 有可能会遇到个问题(如果现在安装office2007,在安装vs2008 不会出现问题, 反正会出现下面问题) 在安装office2007时总是提示“ ...
- web前端----jQuery动画效果
动画效果 // 基本 show([s,[e],[fn]]) hide([s,[e],[fn]]) toggle([s],[e],[fn]) // 滑动 slideDown([s],[e],[fn]) ...
- ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持
0x00 概述 logstash官方最新文档.假设有几十台服务器,每台服务器要监控系统日志syslog.tomcat日志.nginx日志.mysql日志等等,监控OOM.内存低下进程被kill.ngi ...
- Python入门之PyCharm中目录directory与包package的区别
对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清 ...
- 怎么说, 开发会很乐意去主动修改bug?
怎么说, 开发会很乐意去主动修改bug? 一图顶上千言万语,如下:
- 调试工具--console用法收藏
1.使用console进行性能测试和计算代码运行时间:http://www.cnblogs.com/0603ljx/p/4387628.html 2.console命令详解:http://www.cn ...
- 【附5】springboot之配置文件
本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss 代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境 ...
- poj 2449 Remmarguts' Date 求第k短路 Astar算法
=.=好菜 #include <iostream> #include <cstdio> #include <string.h> #include <cstri ...
- CSU 1805 Three Capitals(矩阵树定理+Best定理)
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 题意: A和B之间有a条边,A和G之间有b条边,B和G之间有c条边.现在从A点出发走遍所 ...
- UVa 147 Dollars(完全背包)
https://vjudge.net/problem/UVA-147 题意: 换零钱,计算方案数. 思路: 完全背包,UVa674的加强版. #include<iostream> #inc ...