挑战编程PC/UVa Stern-Brocot代数系统
/*
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代数系统的更多相关文章
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- CSDN挑战编程——《数学问题》
数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<=100: 设S=max{x1*a1+x2*a2+x ...
- CSDN挑战编程——《绝对值最小》
绝对值最小 题目详情: 给你一个数组A[n],请你计算出ans=min(|A[i]+A[j]|)(0<=i,j<n). 比如:A={1, 4, -3}, 则: |A[0] + A[0]| ...
- 挑战编程 uva100 3n+1
挑战编程 刘汝佳 的第一道习题 热身题 熟悉下提交格式 题意 #include <iostream> #include <algorithm> using namespace ...
- PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版
, '\n'); #include<cstdio> #include<iostream> #include<string> #include<algorith ...
- The Trip PC/UVa IDs: 110103/10137, Popularity: B, Success rate: average Level: 1
#include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...
- CSDN挑战编程——《金色十月线上编程比赛第二题:解密》
金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...
- 烟大 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 ...
随机推荐
- Wcf for wp8 创建wcf服务 连接wp8模拟器并显示来自wcf服务的接口信息 (一)
下载: vs2012 pro for wp8 iis express http://download.microsoft.com/download/B/2/8/B2801FEE-9A60-4AFA-8 ...
- thinkphp实现导航高亮的简单方法
经常会涉及到关于导航菜单高亮显示的问题,大多是通过配合js或者事先分配变量的方式来实现导航高亮的,这里提供另一种思路参考: <ul class="usermenu"> ...
- Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式
转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236 Spring获取ApplicationContex ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- 【转】apache kafka技术分享系列(目录索引)
转自: http://blog.csdn.net/lizhitao/article/details/39499283 估计大神会不定期更新,所以还是访问这个链接看最新的目录list比较好 apa ...
- burpsuite绕过本地javascripte上传文件
burpsuite绕过本地javascripte上传文件 先是找到图片上传的位置: 上传个asp文件试试,一点击上传就出现: 这样基本就可以确定是本地检测文件后缀名的方式来 ...
- hdu 5761 Rowe Bo 微分方程
1010 Rower Bo 首先这个题微分方程强解显然是可以的,但是可以发现如果设参比较巧妙就能得到很方便的做法. 先分解v_1v1, 设船到原点的距离是rr,容易列出方程 \frac{ dr} ...
- Android 滑动冲突处理
要想解决滑动冲突就必须好好理解 Android 的事件分发机制.不了解 Android 事件分发机制的请先参考资料学习一下. 一般有 2 种方法 1 外部拦截法 这个非常简单,因为事件是从父 view ...
- 胜利大逃亡[HDU1253]
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 【wikioi】1018 单词接龙
题目链接 算法:DFS+考你阅题 题目描述: 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中 ...