长春理工大学第十四届程序设计竞赛(重现赛)B.Bowling Game

链接:https://ac.nowcoder.com/acm/contest/912/B

题意:

链接:https://ac.nowcoder.com/acm/contest/912/B
来源:牛客网

CUST的队员打完省赛后,小r带着大家去打保龄球。
保龄球是一项难度非常高的游戏,然而这根本难不住校队成员,他们个个都很厉害(炸和)一发10个瓶都倒。尤其是小r,每次都能闭着眼睛一次扔倒10个瓶。他们当中也有一个并不那么厉害的下水道玩家,每次都能把球丢进下水道里,导致一个球瓶都砸不中。



几轮下来,我们发现回来的球越来越少,最后只剩几个9号球了。他们不爱丢9号球,因为太轻了。

在询问工作小姐姐后,得知:咱们松江保龄球俱乐部技术并不那么先进,所以后台是人工操作把球捡回来,现在球没有回来,导致球变少的原因是球卡住了,投进下水道就可能会导致现在这种情况。

校队成员心里都有数,他们每人都至少炸和过一次,只有某下水道玩家。。。

我们得知后台都是方形的盒子,大概这样的时候保龄球会卡住,图中蓝色面积S1S1,黄色面积S2S2,问球的直径多大的时候会按照图中所示卡住。


思路:

根据几何推导出球所在三角形的三边长,x,y,z,得到(x+y+z)*r*1/2 = s1。

代码:

#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long LL;
const int MAXN = 3e5 + 10;
const int MOD = 1e9 + 7;
int n, m, k, t;
 
int main()
{
    double s1, s2;
    cin >> s1 >> s2;
    double s3 = s1*4+s2;
    double l3 = sqrt(s3), l2 = sqrt(s2);
    double daiata = sqrt(l3*l3 - 8.0*s1);
    double l4 = (l3-daiata)/2.0;
    double l5 = l3-l4;
    double res = s1*2/(l2+l4+l5);
    cout << res*2.0 << endl;
 
    return 0;
}

  

原文地址:https://www.cnblogs.com/YDDDD/p/10992169.html