P1024 一道naive的二分

Posted んцγυfёìfのι

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1024 一道naive的二分相关的知识,希望对你有一定的参考价值。

好吧,这道题思路还是比较简单的。整个程序大体上很快就打出来了,然后修改了解为整数的情况。

但是交上去一直是50分,最后我很无耻的看了题解,然后抄了一个玄学if回来,瞬间AC,不知道为什么。。。

这句就是玄学:

 1 if(f(i)*f(i+1)<0) 

好吧,下面来看AC代码(本题还可以用2*暴力来做,也很naive)

技术分享图片
 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 double a,b,c,d;
 5 double f(double x)
 6 {
 7     return a*x*x*x+b*x*x+c*x+d;
 8 }
 9 void tw(double l,double r)
10 {
11     if(r-l<=0.005)
12     {
13         printf("%.2f ",l);
14         return;
15     }
16     double mid=(l+r)/2.0;
17     double ll=f(l);
18     double rr=f(r);
19     if(ll==0)
20     {
21         printf("%.2f ",l);
22         return;
23     }
24     if(rr==0)
25     {
26         printf("%.2f ",r);
27         return ;
28     }
29     if(ll*rr>0) return;
30     double m=f(mid);
31     if(m==0)
32     {
33         printf("%.2f ",mid);
34         return;
35     }
36     if(m*ll<0) tw(l,mid);
37     else tw(mid,r);
38     return;
39 }
40 
41 int main()
42 {
43     cin>>a>>b>>c>>d;
44     for(double i=-101.0;i<=100.1;i++)
45     {
46 
47         if(f(i)==0.00)
48         {
49             printf("%.2f ",i);
50         }
51         if(f(i)*f(i+1)<0) tw(i,i+1);
52     }
53     return 0;
54 }
View Code

可以发现二分很冗杂...可以改进。

 

以上是关于P1024 一道naive的二分的主要内容,如果未能解决你的问题,请参考以下文章

[NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)

2019年8月训练(壹)二分,三分

洛谷——P1024 一元三次方程求解

P1024 一元三次方程求解

P1024 一元三次方程求解

一元三次方程组求解 luogu P1024