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
传送门 考场上打了两个小时树剖,结果还是没搞出来 发现对于两个确定的点,它们一定可以列出一个方程来 其中系数的大小和正负只与这两点间距离的奇偶性有关 所以可以加一堆分情况讨论然后树剖 至于正解: 考虑 ...
随机推荐
- android测试之monkey测试
1.首先安装SDK包 2.配置环境变量 3.打开CMD命令窗口,查看是否安装成功 命令:adb version 4.要做monkey测试的安卓包名,获取方式如下(必须启动要获取报名的app) 1.ad ...
- Python学习手册(第四版)——使用入门(自学用)
Python的优点 -可读性 -可移植性 -不是一个独立的工具,可以调用各种库,同时也可以被调用等等 -使编程变得很有趣 -面向对象 -可混合 Python的理念 随便找的一张图 脚本语言? Pyth ...
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- setoolkit的钓鱼实验
1.在kali中打开setoolkit 2.在菜单中选择第一个进入社会工程学攻击 3.选择第二个模块属于网站攻击向量 4.选择第五个模块,进行web劫持攻击 5.选择第二个,进行网站克隆 6.发现访问 ...
- 洛谷 P5249 - [LnOI2019]加特林轮盘赌(期望 dp+高斯消元)
题面传送门 期望真 nm 有意思,所以蒟蒻又来颓期望辣 先特判掉 \(P_0=0\) 的情况,下面假设 \(P_0\ne 0\). 首先注意到我们每次将加特林对准一个人,如果这个人被毙掉了,那么相当于 ...
- [R] 如何在Linux命令行进行参数传入?
以前由于R命令行传参不友好,经常嵌套在其他程序语言(如Perl/Python)中来进行传参,但现在也陆续有一些方式来实现R的传参了,这里简单罗列下. 方法一 最传统的方法就是使用系统自带的comman ...
- 基于tp5免费开源的后台管理系统
基于tp5免费开源的后台管理系统 可以自定义后台菜单,模块等. 后台模板用的是:AdminLTE 简单的后台基础管理系统,有兴趣开源看看 代码地址:https://github.com/mengzhi ...
- Python添加模块路径
1.用函数临时添加 1 import sys #导入sys模块 2 3 4 sys.path.append(r'/tmp/test') #要用绝对路径 5 print(sys.path) #查看模块路 ...
- day12 函数嵌套
day12 函数嵌套 一. args与kwargs def index(a,b,c): print(a,b,c) def wrapper(*args,**kwargs): # args=(1,2,3) ...
- Learning Spark中文版--第五章--加载保存数据(1)
开发工程师和数据科学家都会受益于本章的部分内容.工程师可能希望探索更多的输出格式,看看有没有一些适合他们下游用户的格式.数据科学家可能会更关注他们已经使用的数据格式. Motivation 我 ...