题目的意思是,给你2*n个点,让你找出AX+BY=0这样一条直线,使得2*n个点分居在这条直线的两边。。。。。。。
由于所给数据是-500~500,则可以完全暴力。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<map>
#include<algorithm>
using namespace std;
int A[1009],P[1009];
struct list
{
int x;
int y;
}point[100009];
int main()
{
int n,i,a,b;
while(scanf("%d",&n)==1)
{
if(n==0)
break;
for(i=0;i<2*n;i++)
scanf("%d%d",&point[i].x,&point[i].y);
int leap=1;
for(a=-500;a<=500;a++)
{
for(b=-500;b<=500;b++)
{
int num=0;
if(a==0&&b==0)
continue;
for(i=0;i<2*n;i++)
{
if((a*point[i].x+b*point[i].y)>0)
num++;
if(a*point[i].x+b*point[i].y==0)
break;
}
if(num==n&&i==2*n)//对列出的点都计算了,i==2*n;
{
leap=0;
break;
}
}
if(leap==0)
break;
}
printf("%d %d\n",a,b);
}
return 0;
}