校赛Round2 1008 低能数学题

来源:互联网 发布:先知者软件多少费用 编辑:程序博客网 时间:2024/06/09 20:27

Problem Description

如图,在平面直角坐标系xOy中,已知椭圆C:以及它的左准线l:x=-2,过椭圆右焦点F的直线交椭圆于A、B两点,线段AB的垂直平分线分别交直线l和AB于点P、C,若PC=pAB,求直线AB的斜率k。

Input

输入有多组数据(约100组)。每组数据一行一个实数p,表示线段PC与AB长度的比值p(p>=2)

Output

对于每组数据,输出一行一个实数k,表示直线AB的斜率,如果有多组解,请输出最小的一个正数解(保留3位小数)

Sample Input

22.5100

Sample Output

1.0000.3780.007


分析:
没想到时隔一年多又遇到了解几题!还是在这种情况下遇到的! <( ̄ˇ ̄)/
最后半个小时就是在做这道题,可惜没做出来~,太弱了╮(╯▽╰)╭
直接设AB直线斜率k,和椭圆方程联立消去y可得x的二次方程:
设A(x1,y1),B(x2,y2),则

PC是AB的垂直平分线,且P点的横坐标上-2,C是AB中点;可得P,C点坐标:

进而可得PC,AB的长度:

带入PC=p*AB并化简可得:

利用求根公式可解得:

难点就是计算准确性!
现场做的时候只做到求出PC,AB长度这一步,下面就不敢写了.....,其实要是有信心写下去用求根公式一下子就写出来了,╮(╯▽╰)╭
#include <stdio.h>#include <math.h>int main(){freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);double m, n, t, p, k, k1, k2;while (~scanf("%lf", &p)){n = p*p - 3;m = p*sqrt(p*p - 4);t = 9 - 2*p*p;k1 = (n + m) / t;k2 = (n - m) / t;if (k1 > 0 && k2 > 0){//需要加一个简单的判断,因为题目要求输出最小正数解k = k1 < k2 ? k1 : k2;}else{k = k1 > 0 ? k1 : k2;}printf("%.3lf\n", sqrt(k));}return 0;}


0 0
原创粉丝点击