URAL 1572 Yekaterinozavodsk Great Well(简单几何)

URAL 1572 Yekaterinozavodsk Great Well(简单几何)

题意:

       有一个大坑(可能是圆,正方形或三角形的),然后有n个不计厚度的井盖(可能是圆,正方形或三角形),现在要你判断是否能把井盖扔进坑里去?

分析:

       注意本题不是看坑能否完全包围井盖,而是只要能把井盖扔到坑里去就行.

       所以只需要坑的最大宽度<=井盖的最小长度即可.(想象一下你现在要扔一块模板到脚底的圆形下水道去,多长的木板是你不能扔进去的)

       注意:三角形的最大长度==边长,而最小长度==高.

AC代码:

#include<cstdio>
#include<cmath>
using namespace std;

double get_max(int type,double len)//返回图形最长的部分
{
    if(type==1) return 2*len;
    else if(type==2) return sqrt(2)*len;
    return len;
}
double get_min(int type,double len)//返回图形最短的部分
{
    if(type==1) return 2*len;
    else if(type==2) return len;
    return sqrt(3.0)/2*len;
}

int main()
{
    int type;
    double len;
    while(scanf("%d%lf",&type,&len)==2)
    {
        double max_length=get_max(type,len);
        int n,sum=0;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%lf",&type,&len);
            double min_length=get_min(type,len);
            if(min_length<=max_length)
                ++sum;
        }
        printf("%d\n",sum);
    }
    return 0;
}

你可能感兴趣的:(Algorithm,算法,ACM,计算几何)