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
传送门 考场上打了两个小时树剖,结果还是没搞出来 发现对于两个确定的点,它们一定可以列出一个方程来 其中系数的大小和正负只与这两点间距离的奇偶性有关 所以可以加一堆分情况讨论然后树剖 至于正解: 考虑 ...
随机推荐
- Python集合&字典
Python集合&字典 @ 目录 字典 字典的几种定义方式 第一种 第二种 第三种 字典的一些基本操作 通过key得到value 增加字典键值对 删除字典键值对 格式化操作 清空字典 复制字典 ...
- 【.NET 与树莓派】MPD 的 Mini-API 封装
在前面的水文中,一方面,老周向各位同学介绍了通过 TCP 连接来访问 MPD 服务:另一方面,也简单演示了 ASP.NET Core 的"极简 API"(Mini API).本篇老 ...
- Redis | 第7章 Redis 服务器《Redis设计与实现》
目录 前言 1. 命令请求的执行过程 1.1 发送命令请求 1.2 读取命令请求 1.3 命令执行器(1):查找命令实现 1.4 命令执行器(2):执行预备操作 1.5 命令执行器(3):调用命令的实 ...
- 「日志」Navicat统计的行数竟然和表实际行数不一致
背景 近期为了保障线上数据库的稳定性,我决定针对一些大表的历史数据有计划地进行备份迁移,但是呢,发现一个奇特的现象,Navicat统计行数和表自身count统计数竟然不一致!?0.0 Navicat ...
- [GZOI2017]配对统计
发现我们可以在\(O(n)\)里很多处理出至多\(2n\)对好对. 然后转化成二维偏序. 然后想怎么做怎么做:排序+BIT,莫队都行.
- PCA方差解释比例求解与绘图?
目录 主成分方差解释率计算 绘图示例 主成分方差解释率计算 通常,求得了PCA降维后的特征值,我们就可以绘图,但各个维度的方差解释率没有得到,就无法获得PC坐标的百分比. 有些工具的结果是提供了维度标 ...
- R语言与医学统计图形-【20】ggplot2图例
ggplot2绘图系统--图例:guide函数.标度函数.overrides.aes参数 图例调整函数guide_legend也属于标度函数,但不能单独作为对象使用,即不能如p+guide_legen ...
- R语言与医学统计图形-【11】ggplot2几何对象之散点图
ggplot2绘图系统--几何对象之散点图 以geom开头的函数超过30个.几何对象和标度函数scale密不可分.只有在aes中传入某个变量,scale才能发挥作用. 所谓标度scale,就是图形遥控 ...
- msyql_union
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多个 SELECT 语句会删除重复的数据. 语法 MySQL UNION 操作符语法格式: SELECT ...
- 谈谈AI
由AI大作业想到的 近几年<人工智能导论>的大作业是编写一个博弈程序,这类程序的典型框架就是α-β剪枝算法,像著名的打败了国际象棋大师卡斯帕罗的深蓝,就是这么干的,一些中国象棋程序也是这样 ...