题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1108
题意:给你一个圆,求一条过圆心的直线,使得两边的点数相当(线不能过点)
思路:求的是AX+BY=0的A B,不过找了找网上题解 大部分人都说 A B范围[-500,500]..题目说的是mustn't in [-500,500]的好吧。还有说[-100,100]是因为半径100的。。。我也没找到根据,最后我自己提交了[-50,50]也过了。。其实大概就是在某个范围内就可以构造出所有的可能了。至于这个范围怎么确定我说不出。有人知道请务必告诉我 谢谢
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e2 + 5;
const int INF = 0x3f3f3f3f;
int n, x[MAXN], y[MAXN];
int main() {
while (~scanf("%d", &n) && n) {
for (int i = 1; i <= 2 * n; i++) {
scanf("%d %d", &x[i], &y[i]);
}
bool flag = false;
for (int a = -50; a <= 50 && !flag; a++) {
for (int b = -50; b <= 50; b++) {
int l = 0, r = 0;
for (int i = 1; i <= 2 * n; i++) {
if (a*x[i] + b*y[i] > 0) {
r++;
}
else if (a*x[i] + b*y[i] < 0) {
l++;
}
}
if (l == r && l == n) {
printf("%d %d\n", a, b);
flag = true;
break;
}
}
}
}
return 0;
}