博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂
阅读量:5874 次
发布时间:2019-06-19

本文共 3558 字,大约阅读时间需要 11 分钟。

描述

对于一个素数P,我们可以用一系列有理分数(分子、分母都是不大于N的自然数)来逼近sqrt(p),例如P=2,N=5的时候:1/1<5/4<4/3<sqrt(2)<3/2<5/3<2/1。
任 务 :
给定P、N(N>sqrt(p)),求X、Y、U、V,使x/y<sqrt(p)<u/v且x/y与sqrt(p)之间、sqrt(p)与u/v之间都不能再插入满足题意的有理分数。

输入格式

输入文件的第一行为P、N,其中 P、N<30000。

输出格式

输出文件只有一行,格式为“X/Y U/V”。注意,答案必须是既约的,也就是说分子、分母的最大公约数必须等于1。

测试样例1

输入

样例1: 
2 5 
样例2: 
5 100

输出

样例1: 
4/3 3/2 
样例2: 
38/17 85/38

代码

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 int des_int,P,N,a,b,ans[10]={ 1,1,1,1,1,1,1,1,1,1};10 double des;11 12 int check(int i,int j,double x){13 return (fabs( des-double(ans[i])/double(ans[j]) ) > fabs( des-x ));14 }15 16 void xiao(){ //ans1~217 for(int i=des_int-1;i<=N;i++){18 int flag=0;19 for(int j=1;j<=i;j++){20 double x=double(i)/double(j);21 if(x>des) continue;22 if(check(1,2,x)){23 double k1=(double(ans[1])/double(ans[2])),k2=x;24 bool fl=(k1==k2);25 if(fl) continue;26 ans[1]=i;ans[2]=j;27 }28 else{29 flag=1;break;30 }31 }32 if(flag==1) continue;33 }34 }35 36 void da(){ //ans3~437 for(int i=des_int+1;i<=N;i++){38 int flag=0;39 for(int j=i-1;j>=1;j--){40 double x=double(i)/double(j);41 if(x

穷尽今生所学,T掉2个点

上看不懂的别人代码:

1 #include 
2 #include
3 #include
4 5 int main(int argc, char **argv) 6 { 7 int i, j; 8 int p, n; 9 int a, b, c, d;10 int beg, end;11 double s, max = 0, min = 300000, t;12 scanf("%d%d", &p, &n);13 s = sqrt(p);14 for(i = 1; i <= n; i++){15 beg = i * s - 1;16 end = beg + 1;17 if(beg <= 0){18 beg = 1;19 }20 if(end > n){21 end = n;22 }23 for(j = beg; j <= end; j++){24 t = (double)(j) / i;25 if(t < s && t > max){26 a = j, b = i;27 max = t;28 }29 }30 }31 for(i = 1; i <= n; i++){32 beg = i * s;33 end = beg + 1;34 if(beg <= 0){35 beg = 0;36 }37 if(end > n){38 end = n;39 }40 for(j = beg; j <= end; j++){41 t = (double)(j) / i;42 if(t > s && min > t){43 c = j, d = i;44 min = t;45 }46 }47 }48 printf("%d/%d %d/%d\n", a, b, c, d);49 return 0;50 }

---------------我是猥琐的分割线---------------

 

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 int des_int,P,N,a,b,ans[10]={ 1,1,1,1,1,1,1,1,1,1};10 double des;11 12 int check(int i,int j,double x){13 return (fabs( des-double(ans[i])/double(ans[j]) ) > fabs( des-x ));14 }15 16 void xiao(){ //ans1~217 for(int i=des_int-1;i<=N;i++){18 int flag=0;19 for(int j=1;j<=i;j++){20 double x=double(i)/double(j);21 if(x>des) continue;22 if(check(1,2,x)){23 double k1=(double(ans[1])/double(ans[2])),k2=x;24 bool fl=(k1==k2);25 if(fl) continue;26 ans[1]=i;ans[2]=j;27 }28 else{29 flag=1;break;30 }31 }32 if(flag==1) continue;33 }34 }35 36 void da(){ //ans3~437 for(int i=des_int+1;i<=N;i++){38 int flag=0;39 for(int j=des_int/i+1000;j>=1;j--){40 double x=double(i)/double(j);41 if(x

39行调了个阈值成功骗分,主要都是da()函数耗的时间,也就没多想,+500有点危险,+100绝对过不了

想法来源于(能跑这么久的数肯定很大,分母也就没必要那么大了!!!)

转载于:https://www.cnblogs.com/radiumlrb/p/5800195.html

你可能感兴趣的文章
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
java面向对象高级分层实例_实体类
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>