CF20B Equation 题解
Content
解方程 \(ax^2+bx+c=0\)。
数据范围:\(-10^5\leqslant a,b,c\leqslant 10^5\)。
Solution
很明显上求根公式。
先来给大家推推求根公式吧。
\]
(1)将常数项 \(c\) 移到右边。
(2)将方程两边同时除以 \(a\)。
(3)配方,由于二次项系数是 \(1\),因此很明显常数项是一次项的一半的平方。为了使方程两边相等,右边也要加上一个常数项。
(4)将等号左边写成 \(a^2\) 的形式,同时将等号右边通分。
(5)开根号,注意右边的结果正负都可以(负负得正)。
(6)将等号左边的常数项移到右边。
这样就得到了求根公式了:
\]
没错,\(x_1,x_2\) 就表示成原方程的两个解。
然而,看到方程右边的条件了没有?\(a\neq 0\)。
而题目中并没有保证 \(a\neq 0\)(事实上有 \(a=0\) 的数据)。
那么就需要分类讨论了:
一、如果 \(a=0\)。分三类。
- \(b,c=0\)。那么原方程就变成了 \(0=0\),显然有无数多个解。
- \(b=0,c\neq 0\)。那么原方程就变成了 \(c=0\),显然无解。
- \(b\neq 0\),那么原方程就变成了 \(bx+c=0\),显然该方程的解只有一个,即 \(-\dfrac cb\)。
二、如果 \(a\neq 0\),那么这个方程就是一元二次方程了。依照 \(\Delta\) 分类讨论。
首先得讲讲 \(\Delta\),其实就是上面求根公式中的 \(b^2-4ac\)。为什么要单独拿出这个式子呢?因为这和一元二次方程的解的情况有着密不可分的关系,具体如下:
- \(\Delta>0\),那么原方程中 \(x_1,x_2\) 显然都不相等因此原方程有两个不同的解。
- \(\Delta=0\),那么原方程中的 \(x_1,x_2\) 显然都是 \(-\dfrac{b}{2a}\),因此原方程严格上讲有两个相同的解,但原题目貌似将这种情况算为只有一个解了,因此这里默认为有一个解。
- \(\Delta<0\),显然,根号里面如果是负数是不在实数的讨论范围的,因此原方程严格上讲无实数解,但原题目貌似将这种情况算为无解,因此这里默认为无解。
其实只要找出 \(\Delta\),这道题目就迎刃而解了,直接那上面三种情况分类讨论即可。注意,在有两个解的时候,本题要求从小到大输出,因此建议先把两个解存储进来(设为 \(x,y\)),然后输出 \(\min\{x,y\}\) 和 \(\max\{x,y\}\)。
另外,\(b^2\) 和 \(ac\) 有可能爆出 int 范围内(\(10^5\times 10^5\geqslant2^{31}\)),因此需要开 long long。
Code
long long a, b, c;
int main() {
scanf("%lld%lld%lld", &a, &b, &c);
long long delta = b * b - 4 * a * c;
if(!a && !b && !c) return printf("-1"), 0;
if(!a && !b) return printf("0"), 0;
if(!a) return printf("1\n%.8lf", -c * 1.0 / b), 0;
if(delta > 0)
printf("2\n%.8lf\n%.8lf", min((-b - sqrt(delta)) * 1.0 / (a * 2.0), (-b + sqrt(delta)) * 1.0 / (a * 2.0)), max((-b - sqrt(delta)) * 1.0 / (a * 2.0), (-b + sqrt(delta)) * 1.0 / (a * 2.0)));
else if(delta == 0)
printf("1\n%.8lf", -b / (a * 2.0));
else
printf("0");
return 0;
}
CF20B Equation 题解的更多相关文章
- [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...
- Hdoj 2199.Can you solve this equation? 题解
Problem Description Now,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solutio ...
- cf20B Equation(认真仔细题)
题意: 求AX^2+BX+C=0的根 思路: 考虑到A,B,C所有可能的情况 代码: double a,b,c; int main(){ cin>>a>>b>>c; ...
- Codeforces Round #470 Div. 2题解
A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- The equation (扩展欧几里得)题解
There is an equation ax + by + c = 0. Given a,b,c,x1,x2,y1,y2 you must determine, how many integer r ...
- Codeforces Little Dima and Equation 数学题解
B. Little Dima and Equation time limit per test 1 second memory limit per test 256 megabytes input s ...
- csp-s模拟测试56Merchant, Equation,Rectangle题解
题面:https://www.cnblogs.com/Juve/articles/11619002.html merchant: 二分答案,贪心选前m大的 但是用sort复杂度不优,会T掉 我们只是找 ...
- 2019牛客多校第九场B Quadratic equation(二次剩余定理)题解
题意: 传送门 已知\(0 <= x <= y < p, p = 1e9 + 7\)且有 \((x+y) = b\mod p\) \((x\times y)=c\mod p\) 求解 ...
- 题解 Equation
传送门 考场上打了两个小时树剖,结果还是没搞出来 发现对于两个确定的点,它们一定可以列出一个方程来 其中系数的大小和正负只与这两点间距离的奇偶性有关 所以可以加一堆分情况讨论然后树剖 至于正解: 考虑 ...
随机推荐
- 链式调用Builder
使用Lombok实现链式调用 1.静态调用 User对象: 对象中必须有一个值不为空staticname作为指定的参数并调用对象 @Accessors(chain = true) @Getter @S ...
- Windwos安装Node.js和npm的详细步骤
How to Install Node.js and NPM on Windows Node.js和npm 安装 Node.js 的时候会自动安装 npm ,并且 npm 就是 Node.js 的包管 ...
- 洛谷 P5644 - [PKUWC2018]猎人杀(分治+NTT)
题面传送门 很久之前(2020 年)就听说过这题了,这么经典的题怎么能只听说而亲自做一遍呢 首先注意到每次开枪打死一个猎人之后,打死其他猎人概率的分母就会发生变化,这将使我们维护起来非常棘手,因此我们 ...
- cat的生产应用
web日志文件的合并 cat one.log two.log >all.log sort -k 4 all.log 按照第四列进行时间排序
- js浮点运算的坑
1,js浮点型小数点运算的问题. 这么简单的计算,js竟然算的是错的,究其原因,是因为js小数在内存存储方式的原因. 具体原因: JavaScript 里的数字是采用 IEEE 754 标准的 64 ...
- vue-baidu-map相关随笔
一,使用vue-baidu-map 1.下载相关包依赖 npm i vue-baidu-map 2.在main.js中import引入相关包依赖,在main.js中添加如下代码: import B ...
- stm32串行设备接口SPI控制max31865
本人是刚入行的嵌入式,之前也没有多少项目经验,故在公司的这几个月里,可谓是如履薄冰,对于公司不同项目使用的不同的设备之多,数据手册之繁杂,让我不禁望洋兴叹,故而不愿意放弃周末这大好的自我提升时间,努力 ...
- mysql_取分组后的前几行值
--方法一: select a.id,a.SName,a.ClsNo,a.Score from Table1 a left join Table1 b on a.ClsNo=b.ClsNo and a ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...
- spring-dm 一个简单的实例
spring-dm2.0 运行环境,支持JSP页面 运行spring web 项目需要引用包