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

B Bowling Game

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

题目

CUST的队员打完省赛后,小r带着大家去打保龄球。


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



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

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

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

我们得知后台都是方形的盒子,大概这样的时候保龄球会卡住,图中蓝色面积S1

    输入

输入共一行,由s1,s2两个正整数构成,s1s2为图中面积,保证s1,s2109且图形合法)

输出
输出一行,即保龄球的直径 D。

你的答案与标准答案误差在±0.001范围以内都算正确。

样例
input
6 25
693 2853
output
2
21.586519

思路

将s1分为三个小三角形,两个直角边的边长之和就是sqrt(4*s1+s2),斜边边长就是sqrt(s2),列一元二次方程即可


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int s1,s2;
    while(cin>>s1>>s2)
    {
        double len=sqrt(s2+4*s1);
       
        double _1=(len+sqrt(len*len-8*s1))/2;
       
        double _2=(len-sqrt(len*len-8*s1))/2;
       
        double xie=sqrt(s2);
        
        double sum=xie+_1+_2;
      
        cout<<fixed<<setprecision(6)<<(4*s1)/sum<<endl;
 
    }
    return 0;
}
 

猜你喜欢

转载自www.cnblogs.com/Vampire6/p/10992423.html