acd the cover circle(分情况讨论)

Problem Description

用半径相等的两个圆覆盖一个w*h的矩形,要求两圆不相交且必须在矩形内。求覆盖面积最大时两圆半径。

Input

输入包含多组数据,EOF结束。

每组数据包含一行,分别是两个实数w和h代表矩形的长和宽。

0<w,h<10000

Output

每组数据输出一行表示圆的半径,小数点后保留三位。

Sample Input

2.000 1.000

Sample Output

0.500

(前提w>=h)当W>=2*h时,r=h/2; 当w<2*h时,两圆在巨型内斜着紧靠着,并两圆紧贴着边,根据计算可得 r*r-(w+h)*r+(w*w+h*h)/4=0 再解方程。

#include<stdio.h>
#include<math.h>
int main()
{
    double w,h,r,r1,b,c;
    while(scanf("%lf%lf",&w,&h)!=EOF)
    {
        if(w<h)
        {
            r=w; w=h; h=r;
        }
        if(w>=2*h)
            r=h/2;
        else
        {
            b=-(w+h); c=(w*w+h*h)/4.0;
            r=(-b+sqrt(b*b-4*c))/2;
            r1=(-b-sqrt(b*b-4*c))/2;
            if(r>h/2||r<r1&&r1<=h/2)r=r1;
        }
        printf("%.3lf\n",r);
    }
}

acd the cover circle(分情况讨论)

时间: 2024-10-07 11:12:37

acd the cover circle(分情况讨论)的相关文章

UESTC 1034 AC Milan VS Juventus 分情况讨论

AC Milan VS Juventus Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status Kennethsnow and Hlwt both love football. One day, Kennethsnow wants to review the match in 20032003 between AC Milan and Juventus

ACdream1034:the cover circle

Problem Description 用半径相等的两个圆覆盖一个w*h的矩形,要求两圆不相交且必须在矩形内.求覆盖面积最大时两圆半径. Input 输入包含多组数据,EOF结束. 每组数据包含一行,分别是两个实数w和h代表矩形的长和宽. 0<w,h<10000 Output 每组数据输出一行表示圆的半径,小数点后保留三位. Sample Input 2.000 1.000 Sample Output 0.500 思路:我们可以以矩形的一个顶点为原点坐标(0,0),那么其斜对角的坐标为(w,h

HDU6444(子段和、分情况比较)

要点 不难想到gcd一下然后枚举每个开头走一圈,并记录一下数值. 最终答案是分情况的:1.能走几圈走几圈然后加上最后剩余的最大子段和:2.也可能是最后一圈后面的拖后腿了,所以最后一圈没走完就停,即长度为一圈长的最大子段和:3.一圈为负数时只考虑一圈内的即可,多走了反而变差. 求环形的.不超过某长度的最大子段和,用双端队列处理一下前缀和. const int maxn = 1e4 + 5; int T, n, m, k; ll s, a[maxn]; ll calc(vector<ll> v,

1134 Vertex Cover (25 分)

1134 Vertex Cover (25 分) A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at least one vertex of the set. Now given a graph with several vertex sets, you are supposed to tell if each of them is a vertex c

HDU 2577 分情况多维DP

How to Type Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6787    Accepted Submission(s): 3057 Problem Description Pirates have finished developing the typing software. He called Cathy to test

BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)

描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡常数真是哭瞎了QAQ 然后我们知道k这么小,考虑下每个k怎么乱搞吧... k=2:直接枚举每条边就行啦 k=3:枚举中间点,然后再考虑两端端点O(m^2) k=4:枚举两边的点,然后枚举边考虑中间的两个点是否联通O(m^2) k=5:枚举夹在中间的两个点,然后记录所有可能的中间点数目tot,然后枚举外面的两点

ACM学习历程—UVALive 7147 World Cup(分类讨论 &amp;&amp; 贪心)

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5159 题目大意是就是n个人进行两两的比赛,胜一局得A分,平局B分,败局C分. 然后取前m名入围,求入围的人最小的可能分数以及被淘汰的人的最大的可能分数. 这题首先可以想到的是胜A负C和胜C负A的情况是一模一样的. 所以可以先考虑让A大C小. 然后开始分情况讨论: (

Cover

[题目描述] 有 N 个时间段,某个时间段可能包含其它时间段. 请找出能包含其它时间段最多的那个段,并计算出它包括的其它时间段有多少? [数据范围] 1 <= N <= 25,000 1 <= 时间段开始和结束点 <= 2,000,000,000 [输入格式] 第1行:一个整数 N 第2..N+1行:第i+1行有两个整数A,B(1 <= A < B <= 2,000,000,000)表示第 i 个时间段的开始和结束端点.任意两个时间段的端点不相同. [输出格式]

p3398 仓鼠找sugar (LCA+讨论)

分情况讨论,结果是两条路径有公共点时,深度大的LCA在另一条路径上且另一条路径的两个端点至少其中一个的与深度大的LCA的LCA为那个深度大的LCA #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int u[501000*2],v[500100*2],fir[500000+10],nxt[501000*2],cnt,dfs_clock=0,top[500010]