uva10167

/*
  暴力 过了 要使得两半的 樱桃数目相等 去试每一个斜率 还好他这里要的是 A、B 
  都为正整数 这样范围就锁定在200*100 个点范围内
*/
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
struct point{
  int x,y;
}node[110];
void solve(int num)
{
	int i;
	for(int A=-100;A<=100;A++)
	{
		for(int B=-100;B<=100;B++){
		  int L=0,R=0;
		  for(i=0;i<num;i++){
		    int d=A*node[i].x+B*node[i].y;
			if(d>0)L++;
			if(d<0)R++;
			if(d==0) break;
		  }
		  if(L==num/2&&R==num/2&&i==num){ printf("%d %d
",A,B);return ; }
		}
	}

}
int main()
{
	int num,n,i;
	while(scanf("%d",&n)==1){
		if(n==0) break;
		num=0;
		for(i=0;i<n*2;i++){
		  int a,b;
		   scanf("%d%d",&a,&b);
		   if((a*a+b*b)<=10000){ 
		     node[num].x=a;
			 node[num++].y=b;
		   }
		}

	solve(num);
	}
	return 0;
}


原文地址:https://www.cnblogs.com/Opaser/p/3662026.html