不正方形(四个点构成一个凸四边形)

该博客介绍了一道编程题目,涉及使用C语言来判断由四个点组成的图形是否为一个凸四边形。问题的核心在于确定两点连线与另外两点的相对位置关系,确保每个红色点都在相应黄色点连线的两侧,反之亦然。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:http://oj.saikr.com/problem/ADPC2-C
题意:两黄个点得在两个红点连线的两边且红点也得在黄点连线的两边

#include<stdio.h>
#include<vector>
using namespace std;
typedef long long ll;
struct node{
   
	ll x,y;
}A[255],B[255];
vector<int>v1,v2;
int main()
{
   
	int N,M;
	scanf("%d %d",&N,&M);
	for(int i=0;i<N;i++)
		scanf("%lld %lld",&A[i].x,&A[i].y);
	for(int i=0;i<M;i++)
		scanf("%lld %lld",&B[i].x,&B[i].y);
	
	bool Flag=false;
	for(int i1=0;i1<N;i1++)
	{
   
		for(int i2=i1+1;i2<N;i2++)
		{
   
			/*TL
			for(int j1=0;j1<M;j1++)
			{
				for(int j2=j1+1;j2<M;j2++)
				{
					ll a=A[i2].y-A[i1].y,b=A[i1].x-A[i2].x;
					ll c=A[i1].y*(A[i2].x-A[i1].x)+A[i1].x*(A[i1].y-A[i2].y);
					int f1=0,f2=0;
					if(A[i1].y==A[i2].y)
					{
						if(B[j1].y<A[i1].y) f1=-1;
						else if(B[j1].y>A[i1].y) f1=1;
						if(B[j2].y<A[i2].y) f2=-1;
						else if(B[j2].y>A[i2].y) f2=1;
					}
					else if(A[i1].x==A[i2].x)
					{
						if(B[j1].x<A[i1].x) f1=-1;
						else if(B[j1].x>A[i1].x) f1=1;
						if(B[j2].x<A[i2].x) f2=-1;
						else if(B[j2].x>A[i2].x) f2=1;
					}
					else
					{
						if(a*B[j1].x+b*B[j1].y+c<0) f1=-1;
						else if(a*B[j1].x+b*B[j1].y+c>0) f1=1;
						if(a*B[j2].x+b*B[j2].y+c<0) f2=-1;
						else if(a*B[j2].x+b*B[j2].y+c>0) f2=1;
					}
					
					if(f1!=0&&f1!=f2)
					{
						a=B[j2].y-B[j1].y,b=B[j1].x-B[j2].x;
						c=B[j1].y*(B[j2].x-B[j1].x)+B[j1].x*(B[j1].y-B[j2].y);
						if(B[j1].x==B[j2].x)
						{
							if(A[i1].x<B[j1].x) f1
用户输入一组选项和数据,进行与四边形有关的计算。 四边形的坐标要求按顺序依次输入,连续输入的两个顶是相邻顶,第一个和最 后一个输入的顶相邻。 选项包括: 1:输入四个坐标,判断是否是四边形、平行四边形,判断结果输出 true/false,结果 之间以一个英文空格符分隔。 2:输入四个坐标,判断是否是菱形、矩形、正方形,判断结果输出 true/false,结果 之间以一个英文空格符分隔。 若四个坐标无法构成四边形,输出"not a quadrilateral" 3:输入四个坐标,判断是凹四边形(false)还是四边形(true),输出四边形周长、 面积,结果之间以一个英文空格符分隔。 若四个坐标无法构成四边形,输出"not a quadrilateral" 4:输入六个坐标,前两个构成一条直线,后四个构成一个四边形或三角形,输 出直线与四边形(也可能是三角形)相交的交数量。如果交有两个,再按面积从小到大 输出四边形(或三角形)被直线分割成两部分的面积(换行)。若直线与四边形或三角形的 一条边线重合,输出"The line is coincide with one of the lines"。若后四个符合四边形或三 角形的输入,输出"not a quadrilateral or triangle"。 后四个构成三角形的情况,假设三角形一条边上两个端分别是 x、y,边线中间有 一 z,另一顶 s: 1)符合要求的输入,顶重复或者 z 与 xy 都相邻,如:x x y s、x z y s、x y x s、s x y y。 此时去除冗余,保留一个 x、一个 y。 2) 符合要求的输入,z 与 xy 都相邻,如:z x y s、x z s y、x s z y 5:输入五个坐标,输出第一个是否在后四个构成四边形(限定为四边形考虑凹四边形)或三角形(判定方法见选项 4)的内部(若是四边形输出 in the quadrilateral/outof the quadrilateral,若是三角形输出 in the triangle/outof the triangle)。如果 在多边形的某条边上,输出"on the triangle 或者 on the quadrilateral"。若后四个符合 四边形或三角形,输出"not a quadrilateral or triangle"。 ### 输入格式: 基本格式:选项+":"+坐标 x+","+坐标 y+" "+坐标 x+","+坐标 y。的 x、y 坐标之间以英文"," 分隔,之间以一个英文空格分隔。 ### 输出格式: 基本输出格式见每种选项的描述。 异常情况输出: 如果符合基本格式,输出"Wrong Format"。 如果符合基本格式,但输入的数量符合要求,输出"wrong number of points"。 注意:输出的数据若小数后超过 6 位,只保留小数后 6 位,多余部分采用四舍五入规则 进到最低位。小数后若足 6 位,按原始位数显示,必补齐。例如:1/3 的结果按格式 输出为 0.333333,1.0 按格式输出为 1.0选项 1、2、3 中,若四边形四个中有重合,输出"points coincide"。 选项 4 中,若前两个输入线的重合,输出"points coincide"。 用c#来写
最新发布
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值