题解

16 条题解

  • 1
    @ 2025-06-14 21:49:43

    https://vijos.org/discuss/576d3ddd17f3ca1d12f6a0a1# 这里的程序其实是对的,只是double精度不够,改成long double就好了。

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define sqr(x) ((x)*(x))
    #define eps 1e-6
    using namespace std;
    long double a[3];
    long double area(long double a,long double b,long double c){//{{{
    long double p=(a+b+c)/2;
    return sqrt(p*(p-a)*(p-b)*(p-c));
    }//}}}
    void calc(){//{{{
    sort(a,a+3);
    if(a[0]+a[1]<=a[2]){
    printf("-1\n");
    return;
    }
    long double sin[3],cos[3],ratio,x;
    for(int i=0;i<3;i++){
    cos[i]=(sqr(a[(i+1)%3])+sqr(a[(i+2)%3])-sqr(a[i]))/(2*a[(i+1)%3]*a[(i+2)%3]);
    sin[i]=sqrt(1-sqr(cos[i]));
    }
    ratio=a[0]/sin[0];
    if(cos[2]<-eps)x=sin[0]*sin[1]*sin[2]*ratio/(sin[2]+sin[1]*sin[0]);
    else x=sin[0]*sin[1]*sin[2]*ratio/(sin[0]+sin[1]*sin[2]);
    printf("%.3Lf\n",area(a[0],a[1],a[2])-sqr(x));
    }//}}}
    int main()
    {
    scanf("%Lf%Lf%Lf",a,a+1,a+2);
    do{
    calc();
    scanf("%Lf%Lf%Lf",a,a+1,a+2);
    }while(a[0]>eps);
    return 0;
    }
    
  • 0
    @ 2009-10-29 09:43:35

    分类讨论。。

    相似三角形。

  • 0
    @ 2009-08-14 21:47:32

    var

    i,n,a,b,c:int64;

    s,p,ans,h:extended;

    procedure swap(var x,y:int64);

    var

    tmp:int64;

    begin

    tmp:=x;

    x:=y;

    y:=tmp;

    end;

    begin

    while true do

    begin

    readln(a,b,c);

    if a>b then

    swap(a,b);

    if a>c then

    swap(a,c);

    if b>c then

    swap(b,c);

    if (a=0) and (b=0) and (c=0) then

    break

    else

    if a+bsqr(c) then //rui jiao

    begin

    h:=s*2/a;

    ans:=s-sqr(a*h/(a+h));

    writeln(ans:0:3);

    end

    else

    if sqr(a)+sqr(b)

  • 0
    @ 2009-08-03 12:47:46

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    步骤如下:

    1.海伦公式计算S

    2.求最小边上的高(非钝角三角形时) , 求最大边上的高(钝角三角形时)

    3.用相似三角形求正方形边长X,面积就出来了,于是结果就出来了.

    Ps:用勾股定理判断是什么类型的三角形就行了.

  • 0
    @ 2009-04-30 10:49:33

    太恶心了,每次都80

  • 0
    @ 2009-03-16 17:31:16

    谁能讲的细致一下啊

    谢谢

  • 0
    @ 2009-03-04 17:05:34

    “这个正方形的四个顶点都在三角形上”

    我一开始特判庛了,以为钝角三角形的两锐角边都要考虑裁去一部分使其不越界,其实直接忽略就行

  • 0
    @ 2009-02-22 16:30:36

    钝角三角形!!!因为这个我现在都没过啊啊啊啊!

  • 0
    @ 2009-02-20 21:40:29

    17位精度完全够了,建议推出总的公式。

    然后求导误差分析,写成误差较小的形式。

    其实7位精度就够了。

  • 0
    @ 2009-02-19 20:04:16

    奇怪……

    正确答案那么多-1……

  • 0
    @ 2009-02-18 20:41:59

    发现自己套3个公式(正确分子4次,分母3次的)算出来的值与标准答案偏差很大,改成分步计算就AC了,所以建议各位不要怕麻烦,先算高,再算正方行边长,最后算剩余面积。能过的

  • 0
    @ 2009-02-18 19:28:15

    边长用int64才行,单独考虑钝角情况,就这些

  • 0
    @ 2009-02-18 15:38:32

    确信数据已修改?

  • 0
    @ 2009-02-16 17:56:20

    好痛苦。。。

  • 0
    @ 2009-02-18 17:01:15

    数据是对的。

  • 0
    @ 2009-02-16 17:46:48

    果真刷爆 交4次都没过

  • 1

信息

ID
1511
难度
8
分类
计算几何 | 几何知识 点击显示
标签
(无)
递交数
293
已通过
40
通过率
14%
被复制
2
上传者