2 条题解
-
1齐硕 LV 10 @ 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;
} -
02021-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
- 上传者