[JZOJ 5885] [NOIP2018模拟9.27] 物理实验 解题报告 (思维)
2024-08-31 12:00:52
题目链接:
https://jzoj.net/senior/#main/show/5885
题目:
题解:
把$a$数组按升序排序
我们可以枚举$x$,发现对于任意$x$,最优情况下$y$一定等于$x+1$
那么我们就是在一直$x$和$y$的前提下找$z$
可以证明,在合法范围内,计算结果随着$a_z$的增大而单调增
证明就是化简一下这个式子$\frac{a_{z+1}-a_y}{a_{z+1}-a_x}>\frac{a_z-z_y}{a_z-a_x}(a_{z+1}>a_z>a_y>a_x)$,发现是正确的。反之如果是小于号就是不正确的
但是我写的代码它WA了,A掉的代码比我多一句话。但是我查看了结果发现我的输出没有错,和AC代码对拍也没有毛病,当然精度也没有问题...我觉得是OJ出了锅
下面是我的代码
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std; const int N=1e5+;
int n,T;
long double ans;
double m;
double a[N];
int main()
{
freopen("atom.in","r",stdin);
freopen("atom2.out","w",stdout);
scanf("%d",&T);
while (T--)
{
scanf("%d%lf",&n,&m);ans=-;
for (int i=;i<=n;i++) scanf("%lf",a+i);
sort(a+,a++n);
int id=;
for (int i=;i<n-;i++)
{
for (id=max(id,i+);id<n&&a[id+]-a[i]<=m;id++);
if (a[id]-a[i]<=m) ans=max(ans,(long double)(a[id]-a[i+])/(a[id]-a[i]));
}
if (ans==-) puts("-1");
else printf("%.13lf\n",(double)ans);
}
return ;
}
最新文章
- jquery 解析数据库中的json日期为正常的格式
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)
- 使用SQL循环打印&#39;*&#39;菱形
- 编写优质嵌入式C程序
- 以路由控制URL
- Struts1.x教程:配置文件总结
- ajax 注册
- tomcat设置直接通过域名访问项目(不需要接 /项目名)
- java接口自动化基础知识(一)
- html入门1
- [转载]DevOps在传统企业的落地实践及案例分享
- VSCode里面HTML添加CSS时没有提示
- Python学习(二十) —— 前端之CSS
- PAT A1020 Tree Traversals (25 分)——建树,层序遍历
- 【APUE | 08】进程控制
- angular2.0学习笔记1.开发环境搭建 (node.js和npm的安装)
- from __future__ import
- ActiveMQ demo
- IntelliJ IDEA 在运行web项目时部署的位置
- Rails中实现批量删除