2018 Multi-University Training Contest 6 - (1001,1012)

比赛链接http://acm.hdu.edu.cn/contests/contest_show.php?cid=807

1001 oval-and-rectangle

题意:给出焦点在x轴上的椭圆,椭圆的长半轴长为a,短半轴长为b,求内接矩形周长的期望。

解析:首先椭圆公式为 x^2/a^2 + y^2/b^2 = 1。若矩形与椭圆在第一象限的交点为(x,y),则矩形的上边纵坐标为y,y∈[0,b];x= sqrt((1- y^2/b^2)*a^2), 周长为4*(x+y),对应概率为1/b,对期望的贡献为4*(x+y)/b。

由于y从0到b变化,可以得到积分公式:∫ 0 to b   { 4 * a/b*√(b^2-y^2)+y * 4 } dy 求解公式=2*b+π*a。

代码

#include <bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
int main()
{
    int T,a,b;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&a,&b);
        double ans=2.0*b+PI*a;
        cout<<fixed<<setprecision(6)<<(ans-0.0000005)<<endl;
    }
    return 0;
}
1012 Pinball

题意:第二象限有斜面y=b/-a * x,现在(x,y)处有一小球自由落体,小球在斜面上是完全弹性碰撞,问小球能在斜面上弹几次。

解析:队里有人找到了一篇此问题的论文所以就很简单了,当然物理还没忘的话手撕也是可以的。主要有公式如下:

  • 小球从第 k 次 弹起到第 k +1 次落到斜面上:
  • 沿水平方向运动的距离为2*k*g*t*2*sin 2θ;
  • 下降的高度为4*k*g*t*2*sinθ*sinθ。
  • g是重力加速度,t是小球第一次落到斜面的用时,θ是斜面的斜角。

论文:无限长斜面上小球弹跳规律分析

代码

#include <bits/stdc++.h>
using namespace std;
const double g=9.80;
int main()
{
    int T;
    double a,b,x,y;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%lf%lf%lf",&a,&b,&x,&y);
        double y0=b/(-1.0*a)*x;
        double h=(y-y0);
        double t0=sqrt(2.0*h/g);

        double sinO=b/(sqrt(a*a+b*b));
        double cosO=a/(sqrt(a*a+b*b));
        double sin2O=2.0*sinO*cosO;

        double disx=-x;
        double disy=y;
        int k=1;
        while(k<=50)
        {
            disx=disx-2.0*k*g*t0*t0*sin2O;
            disy=disy-4.0*k*g*t0*t0*sinO*sinO;
            if(disx<=0||disy<=0) break;
            k++;
        }
        printf("%d\n",k);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sdau20163942/article/details/81515163