zoj3658 Simple Function (函数值域)
Simple Function
Time Limit: 2 Seconds Memory Limit: 32768 KB
Knowing that x can be any real number that x2 + Dx + E ≠ 0. Now, given the following function
| y = f(x) = |
|
What is the range of y.
Input
The first line contains a single integer T (T ≤ 10000), indicating that there are T cases below.
Each case contains five integers in a single line which are values of A, B, C, D and E (-100 ≤ A, B, C, D, E ≤ 100).
Output
For each case, output the range of y in the form of standard interval expression like in a single line.
The expression is made up by one interval or union of several disjoint intervals.
Each interval is one of the following four forms: "(a, b)", "(a, b]", "[a, b)", "[a, b]"(there is a single space between ',' and 'b'), where a, b are real numbers rounded to 4 decimal places, or "-INF" or "INF" if the value is negative infinity or positive infinity.
If the expression is made up by several disjoint intervals, put the letter 'U' between adjacent intervals. There should be a single space between 'U' and nearby intervals.
In order to make the expression unique, the expression should contain as minimum of intervals as possible and intervals should be listed in increasing order.
See sample output for more detail.
Sample Input
5
1 1 1 2 3
0 1 0 1 -10
-3 -1 0 -1 -1
0 0 0 0 0
1 3 0 2 0
Sample Output
[0.3170, 1.1830]
(-INF, INF)
(-INF, -1.8944] U [-0.1056, INF)
[0.0000, 0.0000]
(-INF, 1.0000) U (1.0000, 1.5000) U (1.5000, INF)
关于求值域,在高中学了很多方法,在这里我不推荐通过移项再根据x来算Δ>=0的方法来求y的值域,我之前就是这样写的,因为这样算出来的Δ值可能有很多种,而且意义不明确(如果数学功底不够就看不出来),太过麻烦,最后讨论分母为0去断点时也很麻烦
下面讲解时修改别人的,因为他的跟我的有点出入。
题目大意:
描述起来很简单,求f(x) = (Ax^2 + Bx + C) / (x^2 + Dx + E)的值域。
解题思路:
分子分母都含有自变量x,不好处理。最简单的想法就是把分子上的自变量消去。(二次->一次->零次)。然后就是各种情况讨论。
1.二次->一次
f(x) = (Ax^2 + Bx + C) / (x^2 + Dx + E)
= A + (bx + c) / (x^2 + Dx + E) (其中b=B-A*D, c=C-A*E)
= A + g(x)
这样我们把分子的二次项消除了。注意之后的结果区间都要加上A。
2.一次-> 零次
(1) 若B = 0。那么g(x) = c / (x^2 + Dx + E)
(a)如果c=0。则值域为[0, 0].
(b)如果c!=0。则此时分母的式子是一个开口向上的抛物线,设其极小值为mins,则取值区间为[mins, INF).
此时需要对mins和c的正负情况讨论才能写出正确区间。(mins的正负即表示Δ)
c>0时
- mins>0 值域为 (0, c/mins].
- mins>0 值域为 (0, INF].
- mins<0 值域为 (-INF, c/mins] U (0, INF)
c<0时同上分析,区间颠倒下就可以了。
(2) 若b != 0。那么g(x) = (bx + c) / (x^2 + Dx + E)
要消去一次项,我们可以换元,令t=b*x + c得到
g(t) = b*b*t / (t^2 + bb*t + cc) 其中bb=D*b-2*c,cc=(c*c+E*b*b-D*b*c);
(1)如果t取0,则g(t)=0;
(2)当t!=0时 g(x) =b*b/(t+cc/t + bb) = h(t)
此时要求h(t)= b*b/(t+cc/t + bb)的值域(t!=0)。只有分母有自变量,非常好求解了。注意最后要把0点补回去。
(i) cc<0 时。t+cc/t 能取遍(-INF, INF)。所以值域的为(-INF, INF)。
(ii) cc>0 时。t+cc/t 的值域为(-INF, 2√cc] U [2√cc, INF)
故分母的值域为(-INF, 2√cc+bb] U [2√cc+bb, INF)
全部的值域易得。我这里不需要讨论分子分母的正负号,但是需要确定区间的范围,细心点就好了,详见代码吧。
#include<stdio.h>
#include<math.h> int main()
{
int T;
double A,B,C,D,E,a,b,c,bb,cc,x1,x2,temp1,temp2,y1,mins;
scanf("%d",&T);
while(T--)
{
scanf("%lf%lf%lf%lf%lf",&A,&B,&C,&D,&E);
a=A;
b=B-A*D;
c=C-A*E;
mins=E-D*D/4;//分母抛物线的极大值
if(b==0)//f(x)=A+((B-A*D)*x+C-A*E)/(x*x+D*x+E),f(x)=a+(b*x+c)/(x*x+D*x+E)
{
if(c==0)
printf("[%.4f, %.4f]\n",A,A);
else if(c>0)
{
if(mins>0)
printf("(%.4f, %.4f]\n",A,c/mins+A);
else if(mins<0)
printf("(-INF, %.4f] U (%.4f, INF)\n",c/mins+A,A);
else printf("(%.4f, INF)\n",A);
}
else
{
if(mins>0)
printf("[%.4f, %.4f)\n",c/mins+A,A);
else if(mins<0)
printf("(-INF, %.4f) U [%.4f, INF)\n",A,c/mins+A);
else printf("(-INF, %.4f)\n",A);
}
}
else //b!=0情况,f(x)=A+b*b/(t+(c*c+E*b*b-D*b*c)/t+D*b-2*c)
{
x1=-c/b;
if(x1*x1+D*x1+E==0)//排除那种分子分母有公因式的情况
{
x2=-D-x1;
if(x1==x2)
printf("(-INF, %.4f) U (%.4f, INF)\n",A,A);
else
{//(b*(x-x1))/((x-x1)*(x-x2))
y1=b/(x1-x2);
if(y1>0)
printf("(-INF, %.4f) U (%.4f, %.4f) U (%.4f, INF)\n",A,A,A+y1,A+y1);
else
printf("(-INF, %.4f) U (%.4f, %.4f) U (%.4f, INF)\n",A+y1,A+y1,A,A);
}
}
else
{
bb=D*b-2*c;
cc=(c*c+E*b*b-D*b*c);
if(cc>0)//分母化成了g(t)=t+cc/t+bb,t=b*x+c,分子变成了b*b,所以不用考虑分子的符号了
{
temp1=2.0*sqrt(cc);
temp2=temp1+bb;//这便是分母的极大值
temp1=-temp1+bb;//分母的极小值
if(temp1>0)//极小值大于0
printf("(-INF, %.4f] U [%.4f, INF)\n",A+b*b/temp2,A+b*b/temp1);
else if(temp1==0)//极小值为0
printf("(-INF, %.4f]\n",A+b*b/temp2);
else if(temp2<0)//极大值小于0
printf("(-INF, %.4f] U [%.4f, INF)\n",A+b*b/temp2,A+b*b/temp1);
else if(temp2==0)//极大值为0
printf("[%.4f, INF)\n",A+b*b/temp1);
else printf("[%.4f, %.4f]\n",A+b*b/temp1,A+b*b/temp2);
}
else if(cc<0)
printf("(-INF, INF)\n");
else
printf("(-INF, INF)\n");
}
}
}
return 0;
}
zoj3658 Simple Function (函数值域)的更多相关文章
- HDU 4423 Simple Function(数学题,2012长春D题)
Simple Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 关于Function()函数对象的那些小九九
概念:首先,函数是一种特殊类型的数据,函数也是数据类型的一种,实际上函数也是一种对象,函数对象的内建构造器是Function(); 函数的几种创建方式: 函数声明法: function sum(a,b ...
- JavaScript function函数种类(转)
转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通 ...
- JavaScript function函数种类介绍
JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) { ...
- 【JS学习笔记】关于function函数
函数的基本格式 function 函数名() { 代码: } 函数的定义和调用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR
Sqlserver 自定义函数 Function使用介绍 前言: 在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...
- 创建一个Scalar-valued Function函数来实现LastIndexOf
昨天有帮助网友解决的个字符串截取的问题,<截取字符串中最后一个中文词语(MS SQL)>http://www.cnblogs.com/insus/p/7883606.html 虽然实现了, ...
- javascript:function 函数声明和函数表达式 详解
函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...
- jquery中的 $(function(){ .. }) 函数
2017-04-29 在讲解jquery中的 $(function(){ .. }) 函数之前,我们先简单了解下匿名函数.匿名函数的形式为:(function(){ ... }),又如 functio ...
随机推荐
- Android 面试精华题目总结
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家 ...
- Because the people who are crazy enough to think they can change the world, are the ones who do.
Here's to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square h ...
- LA 6449 IQ Test
[题目] 给出一个长度为n的数组(8<n<12),告诉你规律 (1<=d<=3)要求d尽量小 现在求第n+1项 [题解] 水题 不知道怎么求a1~ad? 用克拉默法则 [代码 ...
- python集合set,frozenset--笔记
<Python3程序开发指南>笔记. python提供了2种内置的集合类型:可变的set类型.固定的frozenset类型. 只有可哈希运算的对象可添加到集合中.可哈希的数据类型:floa ...
- 转载-- C/S 与 B/S 区别
C/S 与 B/S 区别 C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可 ...
- 字符串转化为json的三种方法
1,eval方式解析,恐怕这是最早的解析方式了.如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; ...
- JQuery简单实现图片轮播效果
很多页面都需要用到界面轮播,但是用原生js相对来说比较复杂,用jQuery实现效果比较迅速,写个简单的demo 1.首先在HTML页面要放置轮播图案位置插入div,这里写了轮播图片数量为3张,所以定义 ...
- jquery中的this 到底是什么意思? $(this)
如果你学过面向对象语言的话,例如JAVA,你应该明白这个this在JAVA里的意思,简单的说,谁在调用它,它就代表文谁. 那么,用到这个jquery里,也算是蛮简单的.举两个例子,一个是单个对象,一个 ...
- QT学习篇:入门(1)
第一个为管理界面: (1)安全库存的设置,包括序号.物品代码.物品类型.最大库存量.最小库存量.最大库存比率.最小库存比率: (2)计算频率设置,包括:实时,定时(单位分为:分钟.小时.天),来自gl ...
- Javascript 中神奇的 this
Javascript 当中的 this 与其他语言是完全不同的机制,很有可能会让一些编写其他语言的工程师迷惑. 1. 误以为 this 指向函数自身 根据 this 的英语语法,很容易将函数中出现的 ...