/*
Stern-Brocot代数系统 Stern-Brocot树是一种生成所有非负的最简分数m/n的美妙方式。
其基本方式是从(0/1, 1/0)这两个分数开始, 根据需要反复执行如下操作:
在相邻的分数 m/n 和 m1/n1之间插入 (m+m1)/(n+n1) 例如,可以将它看成是无限延伸的二叉树
0 1 1
--- --- ---
1 1 0
/ \
/ \
1 2
--- ---
2 1
/ \ / \
/ \ / \
1 2 3 3
--- --- --- ---
3 3 2 1
.... ... .......
用字母 L 和 R 分别表示从树根开始的一步 往左走 和 往右走,
则一个L和R组成的序列唯一确定了树中的一个位置。 唯一例外的是 1/1.
*/ #include<iostream>
#include<string>
#include<vector>
using namespace std; typedef struct Point
{
int x;
int y;
const Point& operator+=(const Point& pt)
{
x+=pt.x;
y+=pt.y;
return *this;
}
}LP,RP; void getStr(LP leftP, RP rightP, Point pt, const Point P, string& str)
{
if(pt.x == P.x && pt.y==P.y)
{
return;
}
double tmp = pt.x*1.0/pt.y;
double tmp1 = leftP.x*1.0/leftP.y;
double tmp2 = P.x*1.0/P.y;
double tmp3;
if(rightP.y==0)
{
tmp3 = INT_MAX*0.1;
}
else
{
tmp3 = rightP.x*1.0/rightP.y;
}
if(tmp2<tmp&&tmp2>tmp1)
{
rightP = pt;
pt+=leftP; str+='L';
getStr(leftP, rightP, pt, P, str);
}
if(tmp2>tmp&&tmp2<tmp3)
{
leftP = pt;
pt+=rightP; str+='R';
getStr(leftP, rightP, pt, P, str);
}
} int main()
{
int M, N;
vector<string> svec;
string str; Point leftP, rightP, Pt, P;
while(cin>>M>>N)
{
if(1==M&&1==N)
break;
str.clear();
P.x = M;
P.y = N;
leftP.x = 0;
leftP.y = 1;
rightP.x = 1;
rightP.y = 0;
Pt.x = 1;
Pt.y = 1;
getStr(leftP, rightP, Pt, P, str);
svec.push_back(str);
} for (int i=0; i<svec.size(); i++)
{
cout<<svec[i]<<endl;
} return 0;
} /*
5 7
878 323
1 1 */

  

挑战编程PC/UVa Stern-Brocot代数系统的更多相关文章

  1. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  2. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  3. CSDN挑战编程——《数学问题》

    数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<=100: 设S=max{x1*a1+x2*a2+x ...

  4. CSDN挑战编程——《绝对值最小》

    绝对值最小 题目详情: 给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n). 比如:A={1, 4, -3}, 则: |A[0] + A[0]| ...

  5. 挑战编程 uva100 3n+1

    挑战编程 刘汝佳 的第一道习题  热身题 熟悉下提交格式 题意 #include <iostream> #include <algorithm> using namespace ...

  6. PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版

    , '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...

  7. The Trip PC/UVa IDs: 110103/10137, Popularity: B, Success rate: average Level: 1

    #include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...

  8. CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

    金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...

  9. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem A: The 3n + 1 problem(水题)

    Problem A: The 3n + 1 problem Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 14  Solved: 6[Submit][St ...

随机推荐

  1. jQuery+PHP实现浏览更多内容

    Ajax加载的基本原理:当页面载入时,jQuery向后台请求数据,PHP通过查询数据库将最新的几条记录显示在列表页,在列表页的底部有个“查看更多”的链接,通过触发该链接,向服务端发送Ajax请求,后台 ...

  2. Oracle11完全卸载方法 deinstall.bat如何用以及如何删除oracle注册表

    转自:http://blog.sina.com.cn/s/blog_68fe7e15010100an.html 之前因为不知道偶电脑是因为安装了oracle后,才导致的长达两周的开机速度要足足10分钟 ...

  3. MATLAB信号与系统分析(四)——离散信号与系统的复频域分析及MATLAB实现

    一.系统的z变换和反变换 1.利用部分分式展开求解逆Z变换: 2.例子 3.Z变换的MATLAB函数 clear all f=sym('cos(a*k)'); F=ztrans(f) F=sym('z ...

  4. transient的理解

    用法解释 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问. 2)transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被 ...

  5. 微信公众账号开发之微信登陆Oauth授权-第一篇

    我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了 ...

  6. android 全屏视频播放(SurfaceView + MediaPlayer)

    介绍个第三方: JieCaoVideoPlayer 实现Android的全屏视频播放,支持完全自定义UI.手势修改进度和音量.hls.rtsp,设置http头信息,也能在ListView.ViewPa ...

  7. CentOS6.4 配置LVS(DR模式)

    DR模式中LVS主机与实际服务器都有一块网卡连在同一物理网段上. IP分配 VIP:10.10.3.170 RIP1:10.10.3.140 RIP2:10.10.3.141 1.安装所需的依赖包 y ...

  8. [转]单例模式——C++实现自动释放单例类的实例

    [转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...

  9. PHP 常用到的一些小程序

    1.计算两个时间的相差几天 $startdate=strtotime(“2009-12-09”); $enddate=strtotime(“2009-12-05”); 上面的php时间日期函数strt ...

  10. audio.js – 随时随地,播放 HTML5 的声音

    audio.js是一个HTML5标签的简易包装.但它不仅在支持HTML5的浏览器上能够轻松调用标签,并在不支持HTML5的浏览器上也能通过Flash作为B计划使用.除此之外,audio.js所提供的界 ...