hihocoder 1040(矩形判断)
题目链接:传送门
题目大意:给你四条线段,判断能否围成一个面积大于0的矩形,能输出YES,不能输出NO
题目思路:
合法的四条线段应该满足
1.应该必须有四个不同的点
2.线段斜率分为两组,组内相同组间不同
3.若有斜率为0或斜率不存在的线段需特判,否则看斜率不同的线段乘积==-1?"YES":"NO"
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 200005
#define maxn 1050
typedef pair<int,int> PII;
typedef long long LL; int n,m;
struct Node{
int x,y;
bool operator<(const Node&a)const{
if(x==a.x)
return y<a.y;
return x<a.x;
}
}node[][];
map<PII,int>M; ///判断顶点数
double k[];///斜率 int main(){
int i,j,group,x,y,v;
while(scanf("%d",&group)!=EOF){
while(group--){
M.clear();
for(i=;i<=;++i){
scanf("%d%d",&node[i][].x,&node[i][].y);
scanf("%d%d",&node[i][].x,&node[i][].y);
sort(node[i],node[i]+);
}
int num=;
for(i=;i<=;++i)for(j=;j<=;++j){
PII p=make_pair(node[i][j].x,node[i][j].y);
if(!M[p]) ++num;
M[p]=;
}
if(num!=){printf("NO\n");continue;}///顶点数不为4,NO
for(i=;i<;++i){
if(node[i][].x==node[i][].x){ ///斜率不存在
k[i]=inf;
continue;
}
else if(node[i][].y==node[i][].y){
k[i]=;
continue;
}
else{
k[i]=(double)(node[i][].y-node[i][].y)/(double)(node[i][].x-node[i][].x);
}
}
sort(k,k+);
if(fabs(k[]-k[])<1e-&&fabs(k[]-k[])<1e-){
if(fabs(k[]-k[])<1e-)printf("NO\n");
else{
if(fabs(k[]*k[]+)<1e-)printf("YES\n");
else if(fabs(k[])<1e-&&fabs(k[]-inf)<1e-)printf("YES\n");
else printf("NO\n");
}
}
else printf("NO\n");
}
}
return ;
}
hihocoder 1040(矩形判断)的更多相关文章
- hihocoder #1040 矩形判断(计算几何问题 给8个点的坐标,能否成为一个矩形 【模板思路】)
#1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...
- hihoCoder 1040 矩形判断(计算几何)
http://hihocoder.com/problemset/problem/1040 首先判断四条线段是否相交,给出八个点,如果有一些点重合,并且不同坐标的点只有4个的话,表示可以构成四边形. 然 ...
- HihoCoder - 1040 矩形判断
矩形判断 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. Input 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4 ...
- hihoCoder #1040 (判断是否为矩形)
题目大意:给四条线段,问能否构成一个矩形? 题目分析:先判断能否构成四边形,然后选一条边,看另外三条边中是否为一条与他平行,两条垂直. 代码如下: # include<iostream> ...
- hihoCoder 1040 矩阵判断 最详细的解题报告
题目来源:矩阵判断 解题思路: 1.判断矩阵的4个点是否相连,一共输入8个点,只要判断是否4个点是否都经过2遍: 2.判断矩阵中任意一条边与其他边之间要么平行,要么垂直.设A(x1,y1),B(x2, ...
- [hihoCoder]矩形判断
#1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...
- 容斥 或者 单调栈 hihocoder #1476 : 矩形计数 和 G. Snake Rana 2017 ACM Arabella Collegiate Programming Contest
先说一个简单的题目(题目大意自己看去,反正中文):hihocoder上的:http://hihocoder.com/problemset/problem/1476 然后因为这个n和m的矩阵范围是100 ...
- [bzoj2517]矩形覆盖
Description 给定一个$l\;\times\;w$的矩形,和$n$个圆,求最小的$k$使得每个圆的半径$\;\times\;k$后,能覆盖整个矩形. Input 第一行一个整数$T$,表示数 ...
- POJ 1410 Intersection (线段和矩形相交)
题目: Description You are to write a program that has to decide whether a given line segment intersect ...
随机推荐
- 分析USB平台设备模型框架(1)
start_kernel rest_init(); kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); do_basic_setup ...
- SpringMVC学习小结
配置web.xml: <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-cl ...
- 2013夏,iDempiere来了 - v1.0c Installers (Devina LTS Release) 2013-06-27
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ iDempiere来了 - v1.0c Installers (Devina LTS R ...
- 在需要隐藏navigationController控制器
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationControll ...
- IDEA部署Tomcat应用所有接口中文乱码
解决问题的思路: 1.分析比对http请求头,contentType等设置 2.前段编码,后端解码,这个方式比较落麻烦,凡是有中文乱码的地方都要进行解决 3.修改Tomcat的默认编码,tomcat8 ...
- Solr3.6.2和Solr4.9.0经常使用配置
tomcat 以tomcat 7为例,位置/work/apache-tomcat-7.0.55 Solr 3.6.2 基本配置 Solr 3.6.2.须要JDK 6/JDK7支持. 下载Solr 3. ...
- C++使用ADO存取图片
在项目中.我们须要把事故简图上传到总server.以便每一个client都能下载或者查看.在网上找了找,向Server2000存储图片代码比較多,从数据库中读取图片并显示也不少,可是把图片从数据 ...
- 利用inotifywait监控主机文件和目录
利用inotifywait监控主机文件和目录 inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能. 查看内核版本 [root@Oracle ...
- async and await 简单的入门
如果有几个Uri,需要获取这些Uri的所有内容的长度之和,你会如何做? 很简单,使用WebClient一个一个的获取uri的内容长度,进行累加. 也就是说如果有5个Uri,请求的时间分别是:1s 2s ...
- 大数据处理-Trie树
大数据处理--Trie树 1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被 ...