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

该博客介绍了一道编程题目,涉及使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值