cunzai_zsy0531

关注我

CF1468F Full Turn 题解

注意到只要两个人初始的朝向相反就可以看到对方,否则不行。直接把斜率搞成一个 pair 压到 map 里存个数就行了。

点击查看代码
#include<cstdio>
#include<iostream>
#include<map>
#define mp std::make_pair
typedef std::pair<int,int> pii;
int n;
std::map<pii,int> ms;
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int main(){
int T;scanf("%d",&T);while(T--){
	scanf("%d",&n);ms.clear();
	long long ans=0;
	for(int i=1;i<=n;++i){
		int x1,y1,x2,y2;
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		int dx=x2-x1,dy=y2-y1;bool fx=0,fy=0;
		if(dx<0) dx*=-1,fx=1;if(dy<0) dy*=-1,fy=1;
		int g=gcd(dx,dy);dx/=g,dy/=g;
		if(fx) dx*=-1;if(fy) dy*=-1;
		ans+=ms[mp(-dx,-dy)];
		ms[mp(dx,dy)]++;
	}
	printf("%lld\n",ans);
}
	return 0;
}
//F
posted @ 2022-05-28 16:17  cunzai_zsy0531  阅读(18)  评论(0编辑  收藏  举报