2009年2月24日 星期二

Q10167: Birthday Cake

/*
判斷點是否在線上,或者在線的上方或下方
然後去統計全部的點數
如果一樣多就OK

Run time: 0.230
*/
#include <stdio.h>
void choose(int *arr[2], int N);
bool test(int A, int B, int *arr[2], int N);

int main()
{
int N;
int i;

while (scanf("%d", &N))
{
if (!N) break;

int **arr = new int*[2*N];
for ( i = 0; i < 2*N; i++)
arr[i] = new int[2];

for ( i = 0; i < 2*N; i++)
scanf("%d%d", &arr[i][0], &arr[i][1]);

choose(arr, N);

}

return 0;
}

void choose(int *arr[2], int N)
{
int i, j;
int a, b;
for ( i = -500; i <= 500; i++)
for ( j = -500; j <= 500; j++)
if (test(i, j, arr, N))
return;
}

bool test(int A, int B, int *arr[2], int N)
{
int i, j;
int result;
int positive = 0;
int negative = 0;

for ( i = 0; i < 2*N; i++)
{
result = A*arr[i][0] + B*arr[i][1];
if (result > 0)
positive++;
else
if (result < 0)
negative++;
else
return false;
}

if (positive == negative)
{
printf("%d %d\n", A, B);
return true;
}

return false;
}

沒有留言: