124.cpp

来自「平时acm训练时ac的源代码」· C++ 代码 · 共 141 行

CPP
141
字号
//124
//Accepted 96 ms 282 kb 

#include <stdio.h>

int main(void)
{
	int *x1, *x2, *y1, *y2;
	int K, i, x, y, c1, c2, j1, j2, j, t[3];
	scanf("%d", &K);
	x1 = new int[K];
	x2 = new int[K];
	y1 = new int[K];
	y2 = new int[K];
	for (i=0; i<K; i++)
	{
		scanf("%d %d %d %d", &x1[i], &y1[i], &x2[i], &y2[i]);
	}
	scanf("%d %d", &x, &y);
	c1 = 0;
	c2 = 0;
	j1 = 0;
	j2 = 0;
	for (i=0; i<K; i++)
	{
		if (x1[i]==x2[i])
		{
			if (x>x1[i] && ((y>y1[i]&&y<y2[i]) || (y>y2[i] && y<y1[i])))
			{
				c1 ++;
			}
			if (x==x1[i])
			{
				if ((y>=y1[i]&&y<=y2[i]) || (y>=y2[i] && y<=y1[i]))
				{
					i = K;
				}
				else if(y>y1[i] && y>y2[i])
				{
					for (t[0]=0, j=0; j<K; j++)
					{
						if (j!=i && ((x1[i]==x1[j] && y1[i]==y1[j]) || (x1[i]==x2[j] && y1[i]==y2[j])  || (x2[i]==x2[j] && y2[i]==y2[j]) || (x2[i]==x1[j] && y2[i]==y1[j])))
						{
							t[0] ++;
							t[t[0]] = j;
							if (2==t[0])
							{
								j = K;
							}
						}
					}
					t[0] = 0;
					if (x1[t[1]]>x || x2[t[1]]>x)
					{
						t[0] = 1;
					}
					if (1==t[0])
					{
						if (x1[t[2]]<x || x2[t[2]]<x)
						{
							j2 ++;
						}
					}
					else
					{
						if (x1[t[2]]>x || x2[t[2]]>x)
						{
							j2 ++;
						}
					}
				}
			}
		}
		else
		{
			if (y>y1[i] && ((x>x1[i]&&x<x2[i]) || (x>x2[i] && x<x1[i])))
			{
				c2 ++;
			}
			if (y==y1[i])
			{
				if ((x>=x1[i]&&x<=x2[i]) || (x>=x2[i] && x<=x1[i]))
				{
					i = K;
				}
				else if(x>x1[i] && x>x2[i])
				{
					for (t[0]=0, j=0; j<K; j++)
					{
						if (j!=i && ((x1[i]==x1[j] && y1[i]==y1[j]) || (x1[i]==x2[j] && y1[i]==y2[j])  || (x2[i]==x2[j] && y2[i]==y2[j]) || (x2[i]==x1[j] && y2[i]==y1[j])))
						{
							t[0] ++;
							t[t[0]] = j;
							if (2==t[0])
							{
								j = K;
							}
						}
					}
					t[0] = 0;
					if (y1[t[1]]>y || y2[t[1]]>y)
					{
						t[0] = 1;
					}
					if (1==t[0])
					{
						if (y1[t[2]]<y || y2[t[2]]<y)
						{
							j1 ++;
						}
					}
					else
					{
						if (y1[t[2]]>y || y2[t[2]]>y)
						{
							j1 ++;
						}
					}
				}
			}
		}
	}
	if (i==K+1)
	{
		printf("BORDER");
	}
	else if (0!=(c1+j1)%2 && 0!=(c2+j2)%2)
	{
		printf("INSIDE");
	}
	else
	{
		printf("OUTSIDE");
	}
	delete x1;
	delete y1;
	delete x2;
	delete y2;
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?