zoukankan      html  css  js  c++  java
  • P1033自由落体

    传送

    杯具wa,惨痛的教训————别写一些情况多到要打表的判断,写着写着就wa了

    这个题,我主要死在判断上了

    第一遍20分的思路:看小车此时跨越几个整数点。因为我求出了此时小车的车头坐标和车尾坐标。然鹅人家是double类型的。

                     判断打表累死你~~~    ______可爱的打表(打表向我扔了一个unaccetp并表示不想理我)

    难道我们只能从0到n-1判断一遍了吗???好吧只能这样了(我的时间复杂度233)<---一位被TLE整怕了的蒟蒻。

    其实这样复杂度并不高,只有o(n)

    判断解决了,就很好办了。这个题的小球很迷,它不会被车撞飞,而且它与车只差0.0001时会被接到(是在车前/后0.0001而不是在车上方0.0001(脑回路清奇的我思索了两遍才意识到这个问题))。

    因为直接分析略有麻烦,所以我们分两段分析:

    1.所有小球落到k(小车高度)时,小车接住的球数。设此时,小车头坐标为s11,尾坐标为s12。则接住的球数为从0到n-1判断一遍,看有几个球在[s11,s12]中。

    2.小球从k落到地面时,小车接住的球数。设此时小车头坐标为s21,则又接住的球数为从0到n-1判断,看有几个球在[s21,s12]中。

    以上两次接住的球数加起来就是答案。(画工有限,忍一忍吧233)

    代码奉上:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    double g=10,s1,h,v,l,k,n,t1,s[3][3],t2;
    int ans;
    int main()
    {
        scanf("%lf%lf%lf%lf%lf%lf",&h,&s1,&v,&l,&k,&n);
        t1=sqrt((h-k)/5.0000);//t1用来求s11,s12;
        s[1][1]=s1-v*t1;s[1][2]=s[1][1]+l;
        for(int i=0;i<n;i++)
        {if(i>=s[1][1]-0.0001&&i<=s[1][2]+0.0001)ans++;
        }//判断
        t2=sqrt(h/5.0000)-t1;
        s[2][1]=s[1][1]-v*t2;
        for(int i=0;i<n;i++)
        {if(i>=s[2][1]-0.0001&&i<=s[1][1]-0.0001)ans++;
        }
        printf("%d",ans);
    }
  • 相关阅读:
    十个提升你Emacs生产力的高招
    emacs 操作集锦
    分页
    JAVA获取CLASSPATH路径
    用Spring的mappingDirectoryLocations来配置Hibernate映射文件
    ajax请求后台,返回json格式数据,模板!
    javascrip中的confirm小技巧
    如何将word图片粘贴到eWebEditor里面
    如何将word图片粘贴到wangEditor里面
    如何将word图片粘贴到xhEditor里面
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/10628945.html
Copyright © 2011-2022 走看看