SPOJ上的每个题目都做得我泪牛满面。

这个题目也是的。题目意思是给你两个分数a/b和c/d,要你求出一个分数p/q,使得a/b<p/q<c/d,且p最小。

看完题目后半天都没有任何思路哦。于是无奈只好去网上找题解咯。

终于找到一个神牛的题解,并且自己终于把那个东西给看懂了。

下面写下我自己的理解吧。

首先对于我们不要急于求分子,我们只要求出分母q,分子就可以直接用q*a/b+1表示了(想想为什么呢?因为要最小的)。

那么要求这个分母,首先把第一个分数变成0-1之间,即k=a/b,a-=b*k,同时第二个分数也要做相同的改变,c-=d*k;

这样不等式的方向都是没有变化的。这时候要是c/d>1,也就是说c>d,那么就说明p/q=1;

否则我们可以把这个不等式式同时取倒数变为 d/c<q/p<b/a, 这时候我们可以再次递归求解p哦,有了p,q=p*d/c+1;

恩大概就是这样,具体的证明我也无法给出,好好理解一下吧。

 #include <iostream>
using namespace std;
typedef long long ll; ll dfs(ll a,ll b,ll c,ll d)
{
ll k=a/b;
a-=b*k,c-=d*k;
if (c>d) return ;
return dfs( d,c,b,a)*d/c+;
} int main()
{
ll a,b,c,d,p,q;
while (cin>>a>>b>>c>>d)
{
q=dfs(a,b,c,d);
p=q*a/b+;
cout<<p<<'/'<<q<<endl;
}
return ;
}

SPOJ3899——Finding Fractions的更多相关文章

  1. SPOJ 3899. Finding Fractions 连分数

    连分数乱搞,我反正是一眼没看出结果 某巨巨把这题讲解的比较详细 : http://blog.csdn.net/gogdizzy/article/details/8727386 令k = [a/b] 然 ...

  2. 每日英语:Why Are Fractions Key To Future Math Success?

    Many students cruise along just fine in math until fourth grade or so. Then, they hit a wall -- frac ...

  3. Codeforces Round #384 (Div. 2) C. Vladik and fractions(构造题)

    传送门 Description Vladik and Chloe decided to determine who of them is better at math. Vladik claimed ...

  4. hdu-5992 Finding Hotels(kd-tree)

    题目链接: Finding Hotels Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 102400/102400 K (Java/ ...

  5. Codeforces Round #232 (Div. 2) D. On Sum of Fractions

    D. On Sum of Fractions Let's assume that v(n) is the largest prime number, that does not exceed n; u ...

  6. 模拟 --- hdu 12878 : Fun With Fractions

    Fun With Fractions Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit ...

  7. [转] Finding the Best Programmer's Font

    原文 Finding the Best Programmer's Font

  8. Octal Fractions

    Octal Fractions Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 149  Solved: 98 Description Fractions ...

  9. Poj1131-Octal Fractions

    Octal Fractions Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6669   Accepted: 3641 D ...

随机推荐

  1. 考研编程练习---StringMatching(后缀表达式)

    题目描述: Finding all occurrences of a pattern in a text is a problem that arises frequently in text-edi ...

  2. DIV+CSS实现竖排按钮样式

    <div class="btn_left btn_left1">每日单元成功率</div><br/> <div class="b ...

  3. QTC++监控USB插拔

    #if defined(Q_OS_WIN) #include <qt_windows.h> #include <QtCore/qglobal.h> #include <d ...

  4. jenkins统计单元测试的覆盖率

    前提:单元测试和被测代码在一个仓库 maven的pom配置 依赖增加 <dependency> <groupId>org.jacoco</groupId> < ...

  5. javaweb(十四)——JSP原理

    一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...

  6. 一个自己实现的string

    最近实现了一个string类,添加了一些c++11元素. 除了基本的构造析构函数,拷贝构造和赋值函数,另外添加移动拷贝和赋值函数.default是一个很方便的特性有木有. //default cons ...

  7. 理解学习Springboot(二)

    一.关闭banner 如果不想看到任何的banner,可以将其关闭. 当然也可以自己自定义banner,http://patorjk.com/software/taag/#p=display& ...

  8. asp.net 设计条码code 11的问题

    前一段时间思考了一些条码生成的问题,其实条码也可以说是加密的文件显示. 一个条码首先要有规定 比如code 11 又 1234567890 - 这11个字符组成 而1 又用 5码 表示 "1 ...

  9. 兰亭集势收购美国社交购物网站Ador,收购的是人才

    1 月 6 日消息,外贸电商公司兰亭集势(LightInTheBox)今日宣布,已经完成对美国社交电商网站 Ador 公司的收购.Ador 公司总部位于西雅图.这项资产收购通过现金完成,但未披露交易金 ...

  10. 用 Python 构建一个极小的区块链

    虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹.那么,究竟什么是区块链呢? 区块链 以比特币(Bitcoin)或其它加密货币按时间顺序公开地记录 ...