[51nod1187]寻找分数
2017-01-20 16:48
274 查看
题目大意
求整数p和q使得a/b<q/p<c/d且p最小类欧
一个显然的结论最小化分子或分母都是对的。首先如果a>=b,显然可以先减去几个整数变成真分数。
那么如果a<b呢?
ab<qp<cd
dc<pq<ba
递归下去计算。
边界是a=0的时候。
容易看出变成真分数的过程是a%b,翻过来是两个调换。
这是经典的类欧几里得算法。详见代码
#include<cstdio> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; typedef long long ll; ll i,j,k,l,t,n,m,a,b,c,d,p,q,ca; void likegcd(int a,int b,int c,int d){ if (a==0){ q=1;p=floor(d/c)+1; return; } if (a>=b){ likegcd(a%b,b,c-d*(a/b),d); q+=(ll)p*(a/b); return; } if (c>d){ p=q=1; return; } likegcd(d,c,b,a); swap(p,q); } int main(){ scanf("%d",&ca); while (ca--){ scanf("%d%d%d%d",&a,&b,&c,&d); likegcd(a,b,c,d); printf("%lld/%lld\n",q,p); } }
相关文章推荐
- Servlet 监听器入门
- iOS开发——根据数组中的字典中的某一元素排序
- 装机员Ghost Win10 RS1 1607 64位装机贺岁版2017
- spring mvc 登录和非登陆资源控制配置
- Division UVA - 725
- java和python互相调用
- 实战小项目之RTMP流媒体演示系统
- eclipse中配置server中选择tomcat8无法进行下一步处理
- CMake 学习笔记 02 - 更复杂的项目
- myeclipse 与 MySQL的故事
- 关于mysql查询结果单位换算后小数位数的保留方式
- Java面试4
- 程序员面试金典——解题总结: 9.18高难度题 18.10给定两个字典里的单词,长度相等。编写一个方法,将一个单词变换成另一个单词,一次只改动一个字母。
- 基于注解spring AOP实现
- iOS上传图片方向不对处理
- mysql修数据踩的坑
- 什么是SOLID
- MySQL之GTID主从同步
- LitePal数据库
- 从输入网址到浏览器显示页面发生了什么