P9423 [蓝桥杯 2023 国 B] 数三角
-
题意:求平面内
N 个点能组成的等腰三角形个数。 -
思路:直接暴力枚举并判断
3 边是否成等腰三角形。 -
代码:
#include <bits/stdc++.h> using namespace std; inline long long read(){ long long s=0,w=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') w=-1;ch=getchar();} while(ch>='0'&&ch<='9'){ s=s*10+ch-'0';ch=getchar();} return s*w; } inline void write(int x) { char f[0x66ccff]; int tmp=x>0?x:-x; if(x<0) putchar('-') ; int cnt=0 ; while(tmp>0) {f[cnt++]=tmp%10+'0';tmp/=10;} while(cnt>0) putchar(f[--cnt]) ; } int x[0x6cf],y[0x6cf],a,sum=0; double RT(int a,int b) { return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]))*1.00; } int main(){ a=read(); for(int i=1;i<=a;i++){ x[i]=read();y[i]=read(); } for(int i=1;i<=a;i++) for(int j=1;j<i;j++) for(int k=1;k<j;k++) if(RT(i,j)==RT(i,k)&&RT(i,k)==RT(j,k)&&RT(i,j)==RT(i,j)) if(RT(i,j)+RT(i,k)>RT(j,k) && RT(j,k)+RT(i,k)>RT(i,j) && RT(k,j)+RT(j,i)>RT(i,k)) sum++; write(sum); }