第五届趣味编程大赛——D苗童大作战之愤怒的小鸟

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
#include
#include
#include
#include
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;
}

 

你可能感兴趣的:(第五届趣味编程大赛——D苗童大作战之愤怒的小鸟)