暴力,最多一百个点,将所有点带入方程,使得大于零与小于零的个数相同(直线两边点的个数相同)。
刚开始只判断了一边==num ,WA了好几边,换成两边都==num后,AC了 ~~
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
void makeit(int *a, int *b, int num)
{
int i, j;
for(i = -100; i <= 100; i++) //本来开的1000,后来发现其实100左右就可以了 ~~
for(j = -100; j <= 100; j++)
{
int x = 0, y = 0, l, k;
for(k = 0; k < num * 2; k++)
{
l = a[k] * i + b[k] * j;
if(l > 0)
x++;
else if(l < 0)
y++;
else
break;
if(x == num && y == num)
{
printf("%d %d\n", i, j);
return ;
}
}
}
return ;
}
int main()
{
#ifdef state
freopen("sample.txt","r",stdin);
#endif
int a[100+2], b[100+2], num, i;
while(scanf("%d",&num) != EOF && num)
{
for(i = 0; i < 2 * num; i++)
scanf("%d%d",&a[i],&b[i]);
makeit(a, b, num);
}
return 0;
}