Rezultati

Up. imeNalogaJezikRezultatČas oddaje
functor2018 Presek C++ 100/100OK 04. okt '18 @ 20:08

Test Točke Porabljen spomin Porabljen čas Status
#1 100/100 1,730 MiB 0,005 s OK

Ocenjevani program (presek.cpp):
#include <cstdio>
#include <cstdlib>
#include <cmath>

struct Kvadrat
{
	int x1, y1,
	    x2, y2;
};

bool presek_tocka(int x, int y, int kx, int ky, int r)
{
	int dx, dy;
	
	if (x > kx)
		dx = x - kx;
	else
		dx = kx - x;
	
	if (y > ky)
		dy = y - ky;
	else
		dy = ky - y;

	return sqrt(dx*dx + dy*dy) <= r;
}

bool znotraj(Kvadrat k, int x, int y)
{
	if (x >= k.x1 && x <= k.x2)
		if (y >= k.y1 && y <= k.y2)
			return true;
	return false;
}

int main()
{
	int n;
	scanf("%d", &n);

	for (int i = 0; i < n; i++)
	{
		Kvadrat kvadrat;
		scanf("%d %d %d %d", &kvadrat.x1, &kvadrat.y1, &kvadrat.x2, &kvadrat.y2);
		int x, y, r;
		scanf("%d %d %d", &x, &y, &r);
		
		bool resitev = false;

		if (presek_tocka(kvadrat.x1, kvadrat.y1, x, y, r))
		{
			printf("%d %d\n", kvadrat.x1, kvadrat.y1);
			resitev = true;
		}
		else if (presek_tocka(kvadrat.x1, kvadrat.y2, x, y, r))
		{
			printf("%d %d\n", kvadrat.x1, kvadrat.y2);
			resitev = true;
		}
		else if (presek_tocka(kvadrat.x2, kvadrat.y1, x, y, r))
		{
			printf("%d %d\n", kvadrat.x2, kvadrat.y1);
			resitev = true;
		}
		else if (presek_tocka(kvadrat.x2, kvadrat.y2, x, y, r))
		{
			printf("%d %d\n", kvadrat.x2, kvadrat.y2);
			resitev = true;
		}
		
		// Robovi
		else if (znotraj(kvadrat, x-r, y))
		{
			printf("%d %d\n", x-r, y);
			resitev = true;
		}
		else if (znotraj(kvadrat, x+r, y))
		{
			printf("%d %d\n", x+r, y);
			resitev = true;
		}
		else if (znotraj(kvadrat, x, y-r))
		{
			printf("%d %d\n", x, y-r);
			resitev = true;
		}
		else if (znotraj(kvadrat, x, y+r))
		{
			printf("%d %d\n", x, y+r);
			resitev = true;
		}

		// K****
		else if (x >= kvadrat.x1 && x <= kvadrat.x2)
		{
			if (y+r >= kvadrat.y2 && y-r <= kvadrat.y1)
			{
				printf("%d %d\n", x, kvadrat.y1);
				resitev = true;
			}
		}
		else if (y >= kvadrat.y1 && y <= kvadrat.y2)
		{
			if (x+r >= kvadrat.x2 && x-r <= kvadrat.x1)
			{
				printf("%d %d\n", kvadrat.x1, y);
				resitev = true;
			}
		}

		// Znotraj
		else if (znotraj(kvadrat, x, y))
		{
			printf("%d %d\n", x, y);
			resitev = true;
		}

		if (!resitev)
		{
			printf("Presek je prazen\n");
		}
	}
}