HDU
来源:互联网 发布:暴走鞋淘宝网 编辑:程序博客网 时间:2024/05/18 23:56
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6209
题目大意:求离sqrt(x)与k/x最近的有理数,分母不超过100000
解题思路:用a/b<=(a+c)/(b+d)<=c/d来不断接近x,用long double才能过
AC代码:
#include<cstdio>#include<cmath>using namespace std;const long double eps = 1e-15;int gcd(int x, int y){ return x%y ? gcd(y, x%y) : y;}long double ffabs(long double x){ if (x < 0) x = -x; return x;}int judgeZero(long double x){ if (x > eps) return 1; if (x < -eps) return -1; return 0;}int main(){ int t;scanf("%d", &t); while (t--) { int k;scanf("%d", &k); long double x = pow((long double)k, (long double)2 / (long double)3); int xx = x + eps; int up1 = xx, down1 = 1, up2 = xx + 1, down2 = 1; int ansup = up1, ansdown = down1; while (1) { int midup = up1 + up2, middown = down1 + down2; int g = gcd(midup, middown); midup /= g, middown /= g; if (middown > 100000) break; long double tmp1 = midup, tmp2 = middown, tmp3 = ansup, tmp4 = ansdown; if (judgeZero(ffabs(tmp1 / tmp2 - x)-ffabs(tmp3 / tmp4 - x))<0) ansup = midup, ansdown = middown; if (judgeZero(tmp1 / tmp2 - x) > 0) up2 = midup, down2 = middown; else if (judgeZero(tmp1 / tmp2 - x) < 0) up1 = midup, down1 = middown; else break; } printf("%d/%d\n", ansup, ansdown); } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 云栖精选8月刊丨最全2016云栖大会资料大放送!技术精彩值得打call!
- NotePad++ 编辑NCL 代码,实现自动补全和高亮颜色
- vue编译打包本地查看index文件
- Zookeeper分布式集群的安装与配置
- Xmanager远程连接CentOS7
- HDU
- 基于深度学习的图像语义分割技术概述之常用方法
- Json转换利器Gson之实例二-Gson注解和GsonBuilder
- 分页加载Xrecylerview
- 解决Dialog在第二次打开时报错的问题
- JSON转object
- Java内存区域与内存溢出
- 2017年7月中科院计算所夏令营网数实验室机试题回忆
- ue4 材质翻转法线开关控制