题解 P6320 【[COCI2006-2007#4] SIBICE】

· · 题解

首先我们来考虑,什么情况下火柴能放的下,是在它小于长和宽的最大值吗?其实并不是的,我们来考虑一下下面这张图:

可能不是很清晰,但是可以凑活着看,我们发现一个长方形的对角线是长于他的其他两边的,我们不妨来证明一下:
令长=a=b,斜边长=m根据勾股定理:

m=\sqrt{a^{2}+b^{2}}

m^{2}=a^2+b^{2}
因为平方具有非负性,所以我们能保证斜边是长于两直角边的,于是就可以愉快的敲代码了:

#include<bits/stdc++.h>
using namespace std;
int w,h;
int n;
int main()
{
    scanf("%d %d %d",&n,&w,&h);//读入三个数据,分别为测试数据组数,长度和宽度
    int m=sqrt(w*w+h*h);//计算对角线的长度
    for(int i=1;i<=n;i++)
    {
        int a;
        scanf("%d",&a);
        puts(a<=m?"DA":"NE");//将读入的数据与对角线的长度作比较,这里用了一个三目运算符
    }
    return 0;
}

写在后面:
这题注意两个地方:
1.puts自带换行符
2.m要为int型,不然有可能出锅