直接枚举法
蛋糕的半径为100,所以 a*x+b*y=0 中 -100<=x,y<=100
所以 就只用枚举 for(int i=-100;i<100;i++) for(int j=-100;j<=100;j++) 用此两层循环枚举a、b
然后判断此a、b确定的直线两侧是否都有n个樱桃;
此时必须分三种情况:
1、直线上侧;
2、直线下侧;
3、直线上;(之前就是没考虑这种情况,导致wa)
当落在直线上时,直线两侧就不可能都有n个樱桃,必须排除此情况!
我的代码:
#include<iostream>
#include<stdio.h>
using namespace std;
typedef struct
{
int x,y;
}point;
int Is_yice(point point1,int a,int b)
{
if((point1.x * a + b * point1.y) <0) return 0;
if((point1.x * a + b * point1.y)==0) return -1;
if((point1.x * a + b * point1.y)>0) return 1;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF) {
if(n==0) break;
n=2*n;
point point[100];
int num1=0,num2=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&point[i].x,&point[i].y);
}
int ok;
for(int i=-100;i<=100;i++)
{
for(int j=-100;j<=100;j++)
{
ok=0;
num1=num2=0;
for(int k=0;k<n;k++)
{
int c=Is_yice(point[k],i,j);
if(c==1) num1++;
else if(c==0) num2++;
else break;
}
if(num1==n/2 && num2==n/2)
{
printf("%d %d\n",i,j);
ok=1;break;
}
}
if(ok==1) break;
}
}
return 0;
}