Description
继愤怒的小鸟N.0版本之后,系统又推出了愤怒的小鸟(N+1).0版。
在最新版中,系统给出了 n 个可供选择的点。苗苗和童童已经是大学生了,运用所学知识,她们很机智的选择了使用平面直角坐标系来表示这些点。她们可以在这 n 个位置中任选两个,一个用于架设支架,一个用于放置小鸟。
现给出这 n 个点的坐标,在击打力度和鸟的种类均相同的条件下,求小鸟和支架可能组成的斜率最大值。
Input
第一行输入一个整数 n(1 < n < 1000000) ,代表系统给出 n 个可供选择的点。
接下来的 n 行,每行输入两个整数x,y(1 < x, y < 1000000),分别代表该点的横纵坐标,保证输入按照横坐标递增,且不存在横坐标相同的点。
Output
输出一个数,代表可能组成的仰角正切值的最大值,结果保留两位小数。
Sample Input
3 1 2 2 5 3 4
Sample Output
3.00
Hint
我第一眼看到这个题面可以说很简单了,但是这个斜率最大是一个问题,让人头疼,探索了很久发现其实很简单,题目的这个图暗示了我们,按照很坐标从小到大排序一下,然后,相邻两个点之间求斜率,比较出最大值就OK了。很多人会问为什么,你可以找很多组试一下,是没有反例的。知道这一点,这个题就很简单了。
我在做这个题的时候,第一发T了,时间超限。很懵逼,后来发现,其实题目降低了难度。后台数据已经按照顺序排列好了。我们不需要排序了。直接求就好。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct A
{
double x;
double y;
} p[1000001];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
double b,MAX=-9999;
for(int i=1; i<=n; i++)
scanf("%lf %lf",&p[i].x,&p[i].y);
for(int i=1; i<=n-1; i++)
{
b=(p[i+1].y-p[i].y)/(p[i+1].x-p[i].x);
if(b>MAX)
MAX=b;
}
printf("%.2f\n",MAX);
}
return 0;
}