贝壳找房性价比(2018 计蒜之道 初赛 第三场)
程序员文章站
2022-06-02 21:26:06
...
输入格式
输入第一行一个整数 TT 表示数据组数。
接下来输入 TT 组数据,每一组数据按照下面格式输入。
第一行输入一个整数 nn 表示房源的个数。
接下来 nn 行,每行输入两个整数 s_i, p_isi,pi,分别表示第 ii 个房源的面积为 s_isi 平方米,价格为 p_ipi万元。
数据保证 1 \le T \le 501≤T≤50,2 \le n \le 10^5, |s_i|, |p_i| \le 10^82≤n≤105,∣si∣,∣pi∣≤108,并且 没有任何两个房源的面积和价格都一样。
输出格式
对于每组数据输出一行,如果该组数据的答案趋向于无穷大,输出 -1−1,否则,输出最大的绝对性价比差。(所有输出误差在 10^{-6}10−6 以内都可以被接受)。
本题答案不唯一,符合要求的答案均正确
样例输入
2 4 1 3 4 5 7 8 3 6 2 4 10 4 11
样例输出
1.500000 -1
题目来源
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
struct node
{
double x;
double y;
}a[100005];
bool cmp(node p,node q)
{
return p.x<q.x;
}
double dis(int i1,int i2)
{
double x=fabs(a[i1].x-a[i2].x);
double y=fabs(a[i1].y-a[i2].y);
if(!x)
return -1;
else
{
return y/x*1.0;
}
}
int main()
{
// freopen("C:\\Users\\Administrator\\Desktop\\888.txt","r",stdin);
int t,n;
cin>>t;
for(int k=0;k<t;k++)
{
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}
sort(a,a+n,cmp);
double maxx=0;
double w=0;
int f=0;
for(int i=0;i<n-1;i++)
{
w=dis(i,i+1);
if((int)w==-1)
{
f=1;
cout<<"-1"<<endl;
break;
}
if(w>maxx)
{
maxx=w;
}
}
if(!f)
{
printf("%lf\n",maxx);
}
}
return 0;
}
上一篇: 双截棍
下一篇: 关于集合长度的10篇文章推荐