比赛 2025暑期集训第6场 评测结果 ATTTTTTTTTTTTTT
题目名称 Equilateral Triangles 最终得分 7
用户昵称 会挽弯弓满月 运行时间 41.974 s
代码语言 C++ 内存使用 3.73 MiB
提交时间 2025-07-12 11:30:13
显示代码纯文本
#include <bits/stdc++.h> 
using namespace std;
const int N=310;
int n;
char cc;
struct node{
	int x,y;
}s[N*N];
int cnt;
bool cmp(node o,node p){
	if(o.x==p.x) return o.y<p.y;
	return o.x<p.x;
}
int dis(int o,int p){
	
	int xd,yd;
	xd=abs(s[o].x-s[p].x);
	yd=abs(s[o].y-s[p].y);
	return xd+yd;
}
bool pd(int a,int b,int c){
	int xa,xb,xc,ya,yb,yc;
	int res1,res2;
	xa=s[a].x;ya=s[a].y;
	xb=s[b].x;yb=s[b].y;
	xc=s[c].x;yc=s[c].y;
	res1=(yc-ya)*(xb-xa);
	res2=(yb-ya)*(xc-xa);
	if(res1==res2) return 0;
	return 1;
}
int d1,d2,d3;
int ans;
int main(){
	freopen("usaco_Feb_Triangles!.in","r",stdin);
	freopen("usaco_Feb_Triangles!.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>cc;
			if(cc=='*'){
				s[++cnt].x=i;
				s[cnt].y=j;
			}
		}
	}
	sort(s+1,s+cnt+1,cmp);
	for(int i=1;i<=cnt-2;i++){
		for(int j=i+1;j<=cnt-1;j++){
			for(int k=j+1;k<=cnt;k++){
				if(!pd(i,j,k)) continue;
				d1=dis(i,j);d2=dis(i,k);d3=dis(j,k);
				if(d1==d2&&d2==d3) ans++;
			}
		}
	}
	printf("%d",ans);
	return 0;
}