链接: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; }