#P927. 猜数游戏

猜数游戏

背景 Background

刚学完二分法的蒟蒻。。。

描述 Description

在一档娱乐节目中,主持人让选手在规定次数内猜某物品的价格,若猜中了,就把物品奖给选手,某次竞猜的物品为价格在800-1200元的一款手机,选手开始报价:

选手:1000.

主持人:低了。

选手:1000.

主持人:高了。

选手:1050 ……

不难看出,在上述过程中,选手总是报竞猜前手机价格所在范围的中间值,这样显然可以使竞猜的次数最少。在数学运算中,也可以用类似的方法求函数的零点(使函数值为0的数)的近似值,我们称之为二分法,具体思路如下:(p.s.以下内容摘自数学必修一)

(1)确定初始区间[l,r],验证f(l)*f(r)<0,给定精确度ε;

(2)求区间(l,r)的中点m;

(3)计算f(m);

  • 若f(m)=0,则m就是零点;
  • 若f(l)*f(m)<0,则令r=m(此时零点包含于(l,m));
  • 若f(m)*f(r)<0,则令l=m(此时零点包含于(m,r));

(4)判断是否达到精确度ε:即若r-l<ε,则得到零点近似值r(为方便取右端点),否则重复(2)-(4)。

现在挑战升级了,选手必须在给定区间和精确度内,猜出一个二次函数(f(x)=ax^2+bx+c)两个零点的近似值。

请你运用二分法解决问题,领走你的奖品。

输入格式 Input Format

输入格式:三行:

第一行:三个整数a,b,c,表示二次函数的二次项系数、一次项系数与常数项。

第二行:一个实数ε,表示给定的精确度。

第三行:两个整数l,r,表示零点所在初始区间的左右端点。

输出格式 Output Format

输出格式:一行:若输入的函数不是二次函数,或函数的零点少于两个,输出“Failed”;否则从小到大分别输出函数两个零点的近似值(结果区间的右端点),中间用空格隔开。

样例输入

1 -2 -5
0.000001
-50 50

样例输出

-1.44949 3.44949

数据范围

-1000<=a,b,c<=1000;0<ε<1;-1000000<=l<r<=1000000.

tips:对于所有数据:

1.函数两个零点均为无理数;

2.保证零点在初始区间范围内;

3.所有数据精度都在double范围内。

来源 Source

by刘恒远╮(╯▽╰)╭