其他分享
首页 > 其他分享> > CF1468F Full Turn 题解

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

标签:std,Full,gcd,int,题解,long,Turn,pair,include
来源: https://www.cnblogs.com/winterfrost/p/cf1468f-solution.html