ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Four Segments CodeForces - 14C

2021-08-26 22:33:27  阅读:222  来源: 互联网

标签:return int Segments CodeForces Four x2 y1 y2 LL


原题链接
考察:计算几何,枚举
思路:
  枚举所有线段排列方案.检查以下条件:

  1. 两条线平行,相连两条线垂直.
  2. 边的长度都\(>0\)
  3. 都是直角

判断向量平行和垂直: GO

Code

#include <iostream>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
const int N = 10;
typedef long long LL;
typedef pair<int,int> PII; 
struct Node{
	int x1,y1,x2,y2;
	LL dist;
}node[N];
map<PII,int> mp;
double Dist(Node i)
{
	LL d = (LL)(i.x1-i.x2)*(i.x1-i.x2)+(LL)(i.y1-i.y2)*(i.y1-i.y2);
	return d;
}
bool ck_px(Node s,Node e)
{
	int a = s.x1-s.x2,b = s.y1-s.y2;
	int c = e.x1-e.x2,d = e.y1-e.y2;
	if(a&&b) return 0;
	if(c&&d) return 0;
	if(!a&&!c) return 1;
	if(!d&&!b) return 1;
	return 0;
}
bool ck_cz(Node s,Node e)
{
	int a = s.x1-s.x2,b = s.y1-s.y2;
	int c = e.x1-e.x2,d = e.y1-e.y2;
	LL z = (LL)a*c+(LL)b*d;
	return z==0;
}
bool check()
{
	for(auto& it:mp)
		if(it.second!=2) return 0;
	for(int i=1;i<=4;i++)
	  if(node[i].dist)
	  for(int j=1;j<=4;j++)
	   if(j!=i&&node[j].dist)
	     for(int k=1;k<=4;k++)
	      if(k!=j&&k!=i&&node[k].dist)
	       for(int t=1;t<=4;t++)
	         if(t!=k&&t!=j&&t!=i&&node[t].dist)
	         {
	         	if(node[i].dist+node[j].dist!=node[k].dist+node[t].dist) continue;
	         	if(node[i].dist+node[t].dist!=node[k].dist+node[j].dist) continue;
	         	if(node[i].dist!=node[k].dist) continue;
	         	if(node[j].dist!=node[t].dist) continue; 
	         	if(!ck_px(node[i],node[k])||!ck_px(node[j],node[t])) continue;
	         	if(!ck_cz(node[i],node[j])||!ck_cz(node[j],node[k])||!ck_cz(node[k],node[t])||!ck_cz(node[t],node[i])) continue;
	         	return 1;
			 }
	return 0;
}
int main()
{
	for(int i=1;i<=4;i++)
	{
		int a,b,c,d;
		scanf("%d%d%d%d",&a,&b,&c,&d);
		mp[{a,b}]++,mp[{c,d}]++;
		node[i] = {a,b,c,d};
		node[i].dist = Dist(node[i]);
	}
	if(check()) puts("YES");
	else puts("NO");
	return 0;
}

标签:return,int,Segments,CodeForces,Four,x2,y1,y2,LL
来源: https://www.cnblogs.com/newblg/p/15191866.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有