水题,可以直接暴力,要注意开2*N的数组来储存点
<span style="font-size:12px;">#include <iostream>
#include <cstdio>
using namespace std;
int x[110], y[110];
int main()
{
int N;
while(cin >> N && N){
for(int i = 0; i < 2 * N; ++i){
scanf("%d%d", &x[i], &y[i]);
}
int cnt1, cnt2;
int sign = 0;
for(int i = -500; i <= 500; ++i){
for(int j = -500; j <= 500; ++j){
cnt1 = cnt2 = 0; //记录两侧点的个数;
int ok = 1;
for(int k = 0; k < 2 * N; ++k){
if(i * x[k] + j * y[k] > 0)
++cnt1;
else if(i * x[k] + j * y[k] < 0)
++cnt2;
else{
ok = 0;
break;
}
}
if(ok && cnt1 == cnt2){
sign = 1;
printf("%d %d\n", i, j);
break;
}
}
if(sign)
break;
}
}
return 0;
}</span>