前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POJ3684(弹性碰撞)各种wrong answer踩坑

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

作者头像
kalifa_lau
发布2018-04-28 14:38:58
5520
发布2018-04-28 14:38:58
举报
文章被收录于专栏:kalifaの日々

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

代码语言:javascript
复制
#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;

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档