暴力,最多一百个点,将所有点带入方程,使得大于零与小于零的个数相同(直线两边点的个数相同)。
刚开始只判断了一边==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;
}

本文介绍了一个简单而直接的方法来找到一条直线,使得给定的一组点在这条直线两侧的数量相等。通过遍历所有可能的直线参数,检查每个点相对于该直线的位置,最终找到满足条件的直线。
124

被折叠的 条评论
为什么被折叠?



