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

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

优质内容筛选与推荐>>
1、VS2005 学习记录3-移植处理
2、如何将Android默认的Camra程序导入到eclipse中
3、博客作业04--树
4、zoj3765Lights(splay)
5、3516A调试


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn