[NOIP2014普及组]比例简化

题目地址:

ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2016

vijos:https://vijos.org/p/1912

COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1810

题目来源:NOIP2014普及组第二题

问题分析:题目描述很长,归纳起来,大意就是:

在区间[1,L]内求出2个数A’、B’,这两个数满足:

一、gcd(A’,B’)=1,即A’和B’互素;

二、A/B≤A’/B’;

三、|A’/B’-A/B|的值最小。

考虑到L很小,因此求这两个数时直接穷举即可,不会超时。为了方便实现,我们采用下面的算法:

设置一个存储最小值的变量ans(初值为maxlongint),以及两个临时变量k、l。每次枚举,先判断前两个条件,如果都满足,那么判断|A’/B’-A/B|的值是否小于ans。如果小于,那么ans=|A’/B’-A/B|,k=A’,l=B’。最后输出k和l即可。

这个算法用到了一个性质,即

任何一对互素的整数的比值都不与其它互素整数的比值相等。

这样,只要精度足够,每个比值都对应唯一的一对k和l,它的逆命题也成立。这样程序就很简单了。

参考代码:

program radio;
var
a,b,l,i,j,k,m:longint;
p,q,ans:double;
function gcd(x,y:longint):longint;
begin
if y=0 then exit(x) else exit(gcd(y,x mod y));
end;
begin
assign(input,‘ratio.in‘);
reset(input);
assign(output,‘ratio.out‘);
rewrite(output);
readln(a,b,l);
p:=a/b;
ans:=1010101010;
for i:=1 to l do
  for j:=1 to l do
  if (gcd(i,j)=1)and(i/j>=p)and(i/j-p<ans) then begin
  ans:=i/j-p;
  k:=i;
  m:=j;
  end;
writeln(k,‘ ‘,m);
close(input);
close(output);
end.

ratio.pas

时间: 2025-01-20 00:45:59

[NOIP2014普及组]比例简化的相关文章

[NOIP2014普及组]螺旋矩阵

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2017 vijos:https://vijos.org/p/1913 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1811 题目来源:NOIP2014普及组第三题 问题分析:这道题的内容很易懂,而且容易实现,即直接构造出一个螺旋矩阵,输出对应位置即可.这样的方法大概可以过掉50%的数据.但是,对于100

[NOIP2014普及组]珠心算测验

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2015 vijos:https://vijos.org/p/1911 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1809 题目来源:NOIP2014普及组第一题 问题分析:作为普及组的第一题,这个难度是可以的,而且有坑点.初步读题,我们会想到这样一种情况: count.in count.out 5 1

noip2014普及组

T1珠心算--暴力模拟 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; inline int read(){ int t=1,num=0;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')t=-1;c=getchar();} while(c>='0'&am

cogs luogu 珠心算测试【noip2014 普及组】

1809. [NOIP2014]珠心算测试 ★   输入文件:countb.in   输出文件:countb.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] [提示] 输入输出文件名为countb 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 6 using namespace std; 7 const in

[NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻的平行街道之间的距离都是恒定值 1 .东西向街道从北到南依次编号为0,1,2…128 , 南北向街道从西到东依次编号为0,1,2…128 . 东西向街道和南北向街道相交形成路口,规定编号为x 的南北向街道和编号为y 的东西向街道形成的路口的坐标是(x , y ). 在 某 些 路口存在一定数量的公共

NOIP2014提高组总结

-by mps 尽管今年没参加NOIP2014提高组,但是做了一下,还是有感受的,在这里写出我500分的思路(满分以后会更改,毕竟能力有限......) Day 1 T1 生活大爆炸版石头剪子布 [题目大意] 石头剪子布大家都玩过,只不过这题加了“斯波克”和“蜥蜴人”,事实上还是蛮简单的,有基本逻辑推理常识和基本代码处理能力即可AC,放在PJ都是第一题的难度... 一般有三种做法: 文艺青年:写个矩阵来表示得失,注意要判断两次(甲对乙及乙对甲) 普通青年:16个if嵌套 二B青年:25个if无嵌

洛谷 P2118 比例简化

P2118 比例简化 题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902. 不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意.因为这个比例的数值太大,难以一眼看出它们的关系.对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观. 现给出支持人数A,反对人数B,以及一个上限L,请你

2017年8月14日套题记录 | 普及组

写在前面 今天登洛谷发现离Noip剩下88天了??(虽然看起有点久),然后觉得似乎水了一个暑假什么也没做(虽然学了点数据结构和一些奇奇Gaygay的东西),于是打开题库发现去年Long Happy的集训套题我似乎没有提交过,那就一天一套题,顺便码个题解+心得(雾? T2.传作业 题目描述 某十三同学一日上学迟到,此时已经开始上早自习了,所以他只好请同学帮忙把作业传到组长那里.由于刚开学不久,某十三同学还没来得及认识所有同学,所以传作业时只好找熟悉的同学.已知某十三与组长之间有N个他熟悉的同学,并

1143 纪念品分组 2007年NOIP全国联赛普及组

1143 纪念品分组 2007年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数.为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少. 你的任务是写一个程序