题目的意思就是第一行输入n 代表蛋糕上有2n 个樱桃。
然后下面2n行是每个樱桃的坐标,在-100 到 100 之间,以为蛋糕是原点为中心,半径为100的圆;
输出结果是一条线。Ax + By =0这条线可以将樱桃刚好分成相等的两份,输出A,B;
将樱桃坐标代入方程,大于0在上方,小于0在下方,统计加枚举。
因为A,B在-500 到 500 ;
把A,B枚举就行;
AC代码:
#include<iostream>
#include<string>
using namespace std;
const int N = 50;
struct point {
int x;
int y;
};
int main () {
int num;
int count;
int left,right;
int find;
int A = 0 , B = 0;
int w;
point p[2 * N + 5];
while (cin >> num && num ) {
left = right = 0;
find = 0;
for (count = 0 ; count < num * 2 ; count++) {
cin >> p[count].x;
cin >> p[count].y;
}
for (int i = -500 ; i < 500 ; i++) {
for (int j = -500 ; j < 500 ; j++) {
left = right = 0;
if (i * j == 0)
continue;
for (int k = 0 ; k < count ; k++) {
if (p[k].x > 100 || p[k].y > 100 || p[k].x < -100 || p[k].y < -100)
continue;
if (p[k].x * i + p[k]. y *j == 0) {
break;
}
if (p[k].x * i + p[k].y * j > 0)
left++;
else
right++;
if (left == right && left + right == count){
A = i;
B = j;
find = 1;
break;
}
}
if (find == 1)
break;
}
if (find == 1)
break;
}
cout << A << " " << B << endl;
}
return 0;
}