[BZOJ2712][Violet 2][类欧几里得算法]棒球
来源:互联网 发布:网络阅读远远超越了 编辑:程序博客网 时间:2024/04/27 16:47
跟BZOJ2187类似
把小数转化成分数,就行了。
#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>using namespace std;typedef long long ll;typedef pair<ll,ll> pairs;int n;ll r,x,a,b,c,d;ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}inline void simplify(ll &a,ll &b){ ll g=gcd(a,b); a/=g; b/=g;}pairs solve(ll p1,ll q1,ll p2,ll q2){ simplify(p1,q1); simplify(p2,q2); ll a=p1/q1+1,b=(ll)ceil((double)p2/q2)-1; if(a<=b) return pairs(a,1); if(p1==0) return pairs(1,q2/p2+1); if(p1<=q1&&p2<=q2){ pairs r=solve(q2,p2,q1,p1); swap(r.first,r.second); return r; } ll t=p1/q1; pairs r=solve(p1%q1,q1,p2-t*q2,q2); r.first+=t*r.second; return r;}int main(){ while(~scanf("%d 0.%lld",&n,&r)){ if(r==0){ puts("1"); continue; } x=1; for(int i=1;i<=n+1;i++) x*=10; a=r*10-5; b=x; c=r*10+5; d=x; simplify(a,b); simplify(c,d); pairs Ans=solve(a,b,c,d); printf("%lld\n",min(Ans.second,b)); }}
0 0
- [BZOJ2712][Violet 2][类欧几里得算法]棒球
- [BZOJ2712][[Violet 2]棒球][类欧几里得算法]
- [类欧几里得算法] BZOJ 2712 [Violet 2]棒球
- bzoj2712 -- 类欧几里得算法
- [Violet 2]棒球 (求两分数间分母最小的分数)
- 类欧几里得算法小结
- bzoj2187 -- 类欧几里得算法
- 类欧几里得算法推导
- 类欧几里得算法的推导
- [BZOJ3817][类欧几里得算法]Sum
- [BZOJ2987][类欧几里得算法]Earthquake
- [BZOJ2187][类欧几里得算法]fraction
- [BZOJ2187][fraction][类欧几里得算法]
- 类欧几里得算法与推导
- 类欧几里得算法(部分)
- bzoj2187 fraction 类欧几里得算法
- 类欧几里得算法乱搞记
- 扩展欧几里得算法(2)
- [BZOJ2187][类欧几里得算法]fraction
- JAVA 对象引用,以及对象赋值
- iOS面试题2017
- CODEVS P2498 IncDec Sequence
- zoj 3329 One Person Game (概率与期望DP)
- [BZOJ2712][Violet 2][类欧几里得算法]棒球
- 阿里云-弹性计算产品解析
- FtpClient中文乱码问题解决
- 协同过滤-矩阵分解推荐 java实现
- cus1828:dictionary
- bzoj1013: [JSOI2008]球形空间产生器sphere
- 【正一专栏】巴萨耗光了所有的激情和精力
- 如何高效的完成项目管理
- Linux 创建桌面开始栏图标