SSL-ZYC 有理逼近
2018-01-31 19:20
176 查看
题目大意:
思路:
思路一:
水题!
我们可以枚举分子和分母,求出符合要求的两个分数后,输出。
时间复杂度:O(n^2),绝对超时。
思路二:
还是水题!
我们可以枚举分母,二分分子,求出符合要求的两个分数后,输出。
时间复杂度:O(2n log n),绝对不超时。
代码:
思路:
思路一:
水题!
我们可以枚举分子和分母,求出符合要求的两个分数后,输出。
时间复杂度:O(n^2),绝对超时。
思路二:
还是水题!
我们可以枚举分母,二分分子,求出符合要求的两个分数后,输出。
时间复杂度:O(2n log n),绝对不超时。
代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> using namespace std; int n,m,l,r,z,lo,ro; double k,fm,fz,minz,minm,maxz,maxm; int main() { freopen("rational.in","r",stdin); freopen("rational.out","w",stdout); scanf("%d%d",&m,&n); k=sqrt(m); minm=maxm=1; maxz=2147483647; for (int i=1;i<=n;i++) //枚举分母 { l=1; r=n; //初始化 while (l!=lo||r!=ro) //二分分子 { lo=l; ro=r; z=(l+r)/2+1; fm=i; fz=z; if ((fz/fm)>(minz/minm)&&(fz/fm)<=k) //如果符合要求 { minz=fz; minm=fm; } if (fz/fm<=k) l=z; else r=z-1; } } printf("%0.0lf/%0.0lf ",minz,minm); for (int i=1;i<=n;i++) //枚举分母 { l=1; r=n; while (l!=lo||r!=ro) //二分分子 { lo=l; ro=r; z=(l+r)/2; fm=i; fz=z; if ((fz/fm)<(maxz/maxm)&&(fz/fm)>=k) //如果符合要求 { maxz=fz; maxm=fm; } if (fz/fm<k) l=z+1; else r=z; } } printf("%0.0lf/%0.0lf\n",maxz,maxm); return 0; }
相关文章推荐
- SSL-ZYC 1614 医院设置
- SSL-ZYC 2574 Closest
- SSL-ZYC 1624 小萨的烦恼
- SSL-ZYC 逃离洞穴
- SSL-ZYC 2575 给出字符串
- SSL-ZYC 2406 约数
- SSL-ZYC 抓捕嫌疑犯
- SSL-ZYC 奶牛的声音
- SSL-ZYC 1763 观光旅游
- SSL-ZYC 2408 比萨
- SSL-ZYC 1682 1764 最短网络
- SSL-ZYC 堆箱子
- SSL-ZYC 邮票
- SSL-ZYC 1125 集合
- SSL-ZYC 1626(洛谷P1854) 花店橱窗布置
- SSL-ZYC 1612 最优布线问题
- SSL-ZYC 1618 剑鱼行动
- SSL-ZYC 1761 城市问题
- SSL-ZYC 作业
- SSL-ZYC 牛车