【noi 2.2_7891】一元三次方程求解(二分枚举+输出程序运行时间)
对于noi上的题有2种解法:
1.数据很小(N=100),可以直接打for循环枚举和判断。
2.不会“三分”,便用二分。利用“两根相差>=1”和 f(x1)*f(x2)<0,转换意思为[x,x+1]内不会包含两个根,这样枚举可以保证不漏解。因此,枚举一个个根所在的区间,再用二分枚举找出根。其中,若N=10^5,由于保留2位小数,最好精确到4位小数计算。时间复杂度 O(N)=10^5+3*log(10^4),约为10^5。
以下附上二分的代码——
1 //20160908 Ann
2 #include<cstdio>
3 #include<cstdlib>
4 #include<cstring>
5 #include<iostream>
6 using namespace std;
7 //#include<ctime>
8
9 //eps. epsilon 精确度
10 const double eps=1e-4,INF=1e4;
11 double a,b,c,d;
12
13 double f(double x)
14 { return a*x*x*x+b*x*x+c*x+d; }
15
16 double bisec(double l,double r)
17 {
18 if (f(l)==0) return l;
19 if (f(r)==0) return INF;
20 if (f(l)*f(r)>0) return INF;
21 double m;
22 while (l+eps<r)
23 {
24 m=(l+r)/2;
25 if (f(m)==0) return m;
26 if (f(l)*f(m)<0) r=m-eps;
27 else l=m+eps;
28 }
29 return l;
30 }
31
32 int main()
33 {
34 //freopen("a.in","r",stdin);
35 scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
36 int cnt=0;
37 for(double i=-100.0;i<=100.0;i+=1.0)
38 {
39 double x=bisec(i,i+1.0);
40 if (x!=INF) cnt++,printf("%.2lf ",x);
41 if (cnt==3) break;
42 }
43 //printf("\nTime used = %.2lf\n",(double)clock()/CLOCKS_PER_SEC);
44 return 0;
45 }
【noi 2.2_7891】一元三次方程求解(二分枚举+输出程序运行时间)的更多相关文章
- [P1034][NOIP2001]一元三次方程求解 (二分)
		
二分 #include<bits/stdc++.h> using namespace std; double a,b,c,d; double fc(double x) { )+b*pow( ...
 - [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)
		
[NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...
 - Vijos P1116 一元三次方程求解【多解,暴力,二分】
		
一元三次方程求解 描述 有形如:ax^3+bx^2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之 ...
 - NOIP2001 一元三次方程求解
		
题一 一元三次方程求解(20分) 问题描述 有形如: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 ...
 - 洛谷 [P1024]一元三次方程求解【二分答案】
		
题目链接:https://www.luogu.org/problemnew/show/P1024 题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b ...
 
随机推荐
- 剑指offer 面试题7:重建二叉树
			
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
 - LeetCode24 两两交换链表中的节点
			
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...
 - 修改机器的hostname
			
vi /etc/sysconfig/network hostname=你想设置的主机名 不重启器的情况下使显示名称变成 hostname 主机名
 - 【Oracle】查看oracle表空间大小及增加表空间的几种方法
			
在oracle中表空间是必不可少的.但是怎么查看表空间呢 简单的查看方式是: SQL> select tablespace_name from dba_tablespaces; 想要查看表空间对 ...
 - ctfhub技能树—RCE—过滤目录分隔符,过滤运算符
			
过滤目录分隔符 打开靶机 查看页面信息 查询当前目录下文件结构 进入flag_is_here目录 127.0.0.1;cd flag_is_here 127.0.0.1||ls 执行之后发现还是在当前 ...
 - IE浏览器直接在页面中显示7z文件而不是下载问题解决
			
IE浏览器中输入7z文件的完整下载URL后,不是保存文件,而是直接在页面中显示(当然是乱码) 这是因为浏览器对不同的资源文件处理的方式不同,例如图片文件,一般会直接打开,所以我们可以不用7z,使用zi ...
 - MySQL全面瓦解19:游标相关
			
定义 我们经常会遇到这样的一种情况,需要对我们查询的结果进行遍历操作,并对遍历到的每一条数据进行处理,这时候就会使用到游标. 所以:游标(Cursor)是处理数据的一种存储在MySQL服务器上的数据库 ...
 - MySQL全面瓦解20:可编程性之流程控制语句
			
背景 说到流程控制语句,我们在程序语法中用的比较多,比如C#的if..else...,while...,?: 等.同样的,在MySQL中,也有一些流程控制的语法,方便我们在写函数.存储过程的时候对逻辑 ...
 - 一种获取context中keys和values的高效方法 | golang
			
我们知道,在 golang 中的 context 是一个非常重要的包,保存了代码活动的上下文.我们经常使用 WithValue() 这个方法,来往 context 中 传递一些 key value 数 ...
 - HTTP协议相关知识整理:
			
http协议简介 超文本传输协议:是一种用于分布式.协作式和超媒体信息系统的应用层协议. 一次请求一次响应之后断开连接(无状态,短连接) 分析http请求信息格式 http工作原理 以下是 HTTP ...