luogu1024 一元三次方程求解
题目大意
已知一元三次方程\(ax^3+bx^2+cx+d=0\):
- 有且只有3个根
- 对\(\forall x, x\in[-100,100]\)
- 对\(\forall x_1,x_2,|x_1-x_2|\geq1\)
- 定理:令\(f(x)=ax^3+bx^2+cx+d\),则\(f(l)f(r)<0\Leftrightarrow \exists x\in [l,r],使得f(x)=0\)
思路
从拿到题开始我们很容易想到二分。二分求点都是求一个点,包含该点的区间具有某一特定性质,不包含这个点的区间不具有这一特定性质。“区间的特定性质”便是性质4。但是怎么保证区间中只有一个点呢?由性质3可得每个长度为1的区间最多有一个解。因此我们对于每个满足性质4的长度为1的区间二分即可。
注意
- 长度为1的区间内的函数图象不一定单调,所以\(f(\frac{l+r}{2})\)不具有任何代表性。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const double EPS = 0.0001;
double A, B, C, D;
double Bsearch(double l, double r, double k, double eps, double (*GetVal)(double, double))
{
double mid;
//printf("l %.2f r %.2f\n", l, r);
while(r - l > eps)
{
//printf("l %.2f r %.2f\n", l, r);
mid=(l+r)/2.000;
if(GetVal(l, mid) < k)
r = mid;
else
l = mid;
}
return mid;
}
double Func(double x)
{
return A * x * x * x + B * x * x + C * x + D;
}
double GetVal(double l, double r)
{
return Func(l) * Func(r);
}
int main()
{
cin>>A>>B>>C>>D;
int ansCnt = 0;
double ans[4];
for(double l = -100; l <= 99; l += 1)
{
double r = l + 1;
//printf("l %.2f r %.2f\n", l, r);
if(Func(l) == 0)
ans[++ansCnt] = l;
else if(Func(l) * Func(r) < 0)
{
//printf("ok\n");
ans[++ansCnt] = Bsearch(l, r, 0, EPS, GetVal);
}
}
//printf("%.2f %.2f %.2f\n", ans[1], ans[2], ans[3]);
//sort(ans+1, ans + 3 + 1);
for(int i=1; i<=ansCnt; i++)
printf("%.2f ", ans[i]);
return 0;
}
luogu1024 一元三次方程求解的更多相关文章
- NOIP2001 一元三次方程求解
题一 一元三次方程求解(20分) 问题描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范 ...
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...
- [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)
[NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...
- 洛谷——P1024 一元三次方程求解
P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...
- P1024 一元三次方程求解
P1024 一元三次方程求解 #include<cstdio> #include<iostream> #include<algorithm> using names ...
- 洛谷P1024 一元三次方程求解
P1024 一元三次方程求解 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-10 ...
- Codevs 1038 一元三次方程求解 NOIP 2001(导数 牛顿迭代)
1038 一元三次方程求解 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 有形如:ax3+b ...
- luogu【P1024 一元三次方程求解】题解
题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...
- NOIP2001 一元三次方程求解[导数+牛顿迭代法]
题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...
随机推荐
- C#Cookie操作类,删除Cookie,给Cookie赋值
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...
- android指纹识别、拼图游戏、仿MIUI长截屏、bilibili最美创意等源码
Android精选源码 一个动画效果的播放控件,播放,暂停,停止之间的动画 用 RxJava 实现 Android 指纹识别代码 Android仿滴滴打车(滴滴UI)源码 Android高仿哔哩哔哩动 ...
- php xss 函数
function xss($string) { if (is_array($string)||is_object($string)||is_resource($string)) { return '' ...
- Robot Framework(八) 资源和变量文件
2.7资源和变量文件 测试用例文件和测试套件初始化文件中的用户关键字和变量只能在创建它们的文件中使用,但资源文件提供了共享它们的机制.由于资源文件结构非常接近测试用例文件,因此很容易创建它们. 变量文 ...
- matlab学习GUI可调的界面窗口
创建一个GUI界面,在此依然利用GUI_01的窗口来演示 发现它的最大化窗口不可调 在GUI绘制中,工具--->选择GUI选项---->选择第二个成比例 再运行就可以调控大小了
- eas之获取不同类型的组织视图
OrgViewF7 orgF7=new OrgViewF7(this);orgF7.setCurrentCUID(company.getId().toString());orgF7.setMultiS ...
- 【JavaScript】通过封装自己的JSONP解决浏览器的跨域问题(Ajax跨域)
问题引出:要发送Ajax请求,就必须使用HTTP请求?什么是跨域问题? 什么是跨域问题:如果两个页面中的协议.域名.端口.子域名任意有一项不同,两者之间所进行的访问行动就是跨域的,而浏览器为了安全问题 ...
- MAC 快捷键&使用技巧等
查看端口占用:命令 lsof -i tcp:port (port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL
- 【3】Django创建第一个项目
天地所以能长且久者,以其不自生,故能长生. --老子<道德经> 写在前面:Django在学习的过程中,我们会参考官方文档,从两部分进行讲解,第一部分主要是一个入门项目的搭建开发,第二部分是 ...
- vue中访问数据接口的配置
业务API接口地址: http://localhost:3816/api/ 前端UI浏览地址:http://127.0.0.1:8080/#/home 由于同源策略的问题: 需要配置代理: 在开发环境 ...