2 条题解

  • 1
    @ 2022-07-29 15:19:56

    #include<bits/stdc++.h>
    using namespace std;
    int flag = 0;
    double a[4][2];
    double dis(int x,int y){return pow(a[x][0]-a[y][0],2)+pow(a[x][1]-a[y][1],2);}
    bool equal(double x,double y){if(abs(x-y)<=1e-12) return true;else return false;}
    void check(int x,int y,int z)
    {
    double l[3];l[0]=dis(x,y);l[1]=dis(y,z);l[2]=dis(x,z);
    if(equal(l[0],l[1]) && equal(l[0]*2,l[2]))flag=1;
    }
    int main()
    {
    for(int i=0;i<4;i++)cin>>a[i][0]>>a[i][1];
    for(int i=0;i<4;i++)for(int j=0;j<4;j++)for(int k=0;k<4;k++)
    {
    if(i==j || i==k || j==k) continue;
    check(i,j,k);
    }
    if(flag==1)cout<<"YES\n";else cout<<"NO\n";
    return 0;
    }

  • 0
    @ 2021-05-06 12:18:35

    B Almost Square 题解
    你或许听说过0.1+0.2不等于0.3的说法,因为浮点数只能保证15位的精度。
    所以我们不能直接用==判断相等,而是两个浮点数之差不大于一个固定值,则判断相等。
    按照题意本题需要12位精度(6位小数和6位小数相乘),即

    bool equal(double x,double y){if(abs(x-y)<=1e-12) return true;else return false;}
    

    然后,本题判断的方法是,任取三个点问是否构成等腰直角三角形。"直角"用勾股定理判断,等腰直接判断两条边的长度是否相等。
    Code:

    #include<bits/stdc++.h>
    using namespace std;
    int flag = 0;
    double a[4][2];
    double dis(int x,int y){return pow(a[x][0]-a[y][0],2)+pow(a[x][1]-a[y][1],2);}
    bool equal(double x,double y){if(abs(x-y)<=1e-12) return true;else return false;}
    void check(int x,int y,int z)
    {
        double l[3];l[0]=dis(x,y);l[1]=dis(y,z);l[2]=dis(x,z);
        if(equal(l[0],l[1]) && equal(l[0]*2,l[2]))flag=1;
    }
    int main()
    {
        for(int i=0;i<4;i++)cin>>a[i][0]>>a[i][1];
        for(int i=0;i<4;i++)for(int j=0;j<4;j++)for(int k=0;k<4;k++)
        {
            if(i==j || i==k || j==k) continue;
            check(i,j,k);
        }
        if(flag==1)cout<<"YES\n";else cout<<"NO\n";
        return 0;
    }
    
    
  • 1

信息

ID
1246
难度
8
分类
(无)
标签
(无)
递交数
14
已通过
6
通过率
43%
被复制
3
上传者