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, ...
随机推荐
- mysql count group by统计条数方法
mysql count group by统计条数方法 mysql 分组之后如何统计记录条数? gourp by 之后的 count,把group by查询结果当成一个表再count一次select c ...
- Redis 如何正确实现分布式锁
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- CodeForces 471D MUH and Cube Walls -KMP
Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of ...
- VC++实现程序重启的方法(转载)
转载:http://blog.csdn.net/clever101/article/details/9327597 很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启.所谓重启就是杀死 ...
- 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 1 章 答案
判断对错1.计算机科学是计算机的研究.2.CPU 是计算机的“大脑”.3.辅助存储器也称为 RAM.4.计算机当前正在处理的所有信息都存储在主存储器中.5.语言的语法是它的意思,语义是它的形式.6.函 ...
- Git 基础 —— 安装 配置 别名 对象
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 Git 安装 Git下载地址 ...
- POJ3241 Object Clustering(最小生成树)题解
题意:求最小生成树第K大的边权值 思路: 如果暴力加边再用Kruskal,边太多会超时.这里用一个算法来减少有效边的加入. 边权值为点间曼哈顿距离,那么每个点的有效加边选择应该是和他最近的4个象限方向 ...
- Java propertis文件中组装配置
目的: 实现在配置文件中,进行组装 1.Properties文件配置如下: dns=http://211.103.227.133:8080 qrcode=${dns}/wx/views/invite/ ...
- 【自定义IK词典】Elasticsearch之中文分词器插件es-ik的自定义词库
Elasticsearch之中文分词器插件es-ik 针对一些特殊的词语在分词的时候也需要能够识别 有人会问,那么,例如: 如果我想根据自己的本家姓氏来查询,如zhouls,姓氏“周”. 如 ...
- HDU 6156 Palindrome Function
http://acm.hdu.edu.cn/showproblem.php?pid=6156 题意:$f(n,k)$表示判断n在k进制下是否是回文串,如果是,则返回k,如果不是,则返回1.现在要计算$ ...