美文网首页程序员
POJ3684(弹性碰撞)各种wrong answer踩坑

POJ3684(弹性碰撞)各种wrong answer踩坑

作者: 小太阳花儿 | 来源:发表于2018-03-06 18:01 被阅读6次

    我踩过的坑全部都写在注释里面了,供大家参考。

    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    #include <string.h> //据说缺了这个会导致某些编译器出错
    
    using namespace std;
    
    int N,H,R,T;
    double height[105]; //目前所有double变量最一开始我都用的是float,导致一直wrong answer 后来发现float会损失精度,ACM还是尽量用double
    double g = 10.0;
    
    double cal(int time)
    {
            if(time<0) //一个很小的T遇到一个放的很高的球可能导致还没轮到这个球下落  边界处理不能少
            {
    
                return H;
            }
            double t = sqrt(2.0*H/g); //为什么这里你用的是H而不是H+2*R*i呢 是因为把碰撞时的对方看做碰撞后的新的自己,那么对方的直径是自己没有走的一段路。
    
            int k = int(time/t);
    
            if(k%2==0)
            {
                double t1 = time-k*t;
                return H-g*t1*t1/2;
            }
            else{
                double t2 = k*t+t-time;
                return H-g*t2*t2/2;
            }
    
    }
    
    int main()
    {
        int num=0;
        scanf("%d",&num);
    
        for(int j=0;j<num;j++)
        {
            scanf("%d%d%d%d",&N,&H,&R,&T);//%d之间不能有空格
            for(int i=0;i<N;i++)
            {
                height[i] = cal(T-i);
            }
            sort(height,height+N);
            for(int i = 0;i<N;i++)
            {
                printf("%.2lf%c",height[i]+2*R*i/100.0,i==N-1?'\n':' ');
            }
        }
    
        return 0;
    
    }
    

    相关文章

      网友评论

        本文标题:POJ3684(弹性碰撞)各种wrong answer踩坑

        本文链接:https://www.haomeiwen.com/subject/yhwsaxtx.html