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. 20155305 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)

    20155305 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用E ...

  2. nohub用法

    在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/my ...

  3. 分块算法&BZOJ2002

    题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况. 分块修改理论复杂度为O ...

  4. (ex)Lucas总结

    (ex)Lucas总结 普通Lucas 求 \[ C_n^m\;mod\;p \] 其中\(n,m,p\leq 10^5\)其中\(p\)为质数 公式不难背,那就直接背吧... \[ C_n^m\;m ...

  5. 变态的iis10

    IIS10发布网站不能使用.NET4.0需要重新注册在之前版本的系统中使用如下命令可以直接重新注册: 但是windowsServer2016(iis 10) 使用该命令 提示 版本不支持 C:\WIN ...

  6. dsp6657的helloworld例程测试-第一篇

    环境搭建可以参考http://blog.sina.com.cn/s/blog_ed2e19900102xi2j.html 1. 先从mcsdk导入工程,helloworld例程 2. 提示有错误,估计 ...

  7. Unity商店下载的文件保存路径?

    Win7系统: C:\Users\系统用户名\AppData\Roaming\Unity\Asset Store MAC:"~/Library/Unity/Asset\ Store" ...

  8. 一个web应用的诞生(2)--使用模板

    经过了第一章的内容,已经可以做出一些简单的页面,首先用这种方式做一个登录页面,首先要创建一个login的路由方法: @app.route("/login",methods=[&qu ...

  9. linux菜鸟笔记

    linux目录的子目录复制 cp -r 要复制的目录+新的目录 cp -r a test 意思就是将a的子目录及文件复制到新的目录test下面 zt@ubuntu:~/Desktop$ mkdir - ...

  10. 433. Number of Islands【LintCode java】

    Description Given a boolean 2D matrix, 0 is represented as the sea, 1 is represented as the island. ...