UVa 10167 - Birthday Cake

来源:互联网 发布:linux安全配置基线 编辑:程序博客网 时间:2024/05/01 19:47

题目:给你2N个点。输出一条直线Ax+By=0,使得在直线两边均有n个点,点不在直线上。

分析:搜索、枚举。因为区间是A,B区间是[-500,500],直接枚举即可;

            判断在直线的方向,直接带入方程求解。

说明:暴力(⊙_⊙)!

#include <algorithm>#include <iostream>#include <cstdlib>#include <cstdio>using namespace std;typedef struct pnode{int x,y;}point;point P[100];int main(){int n;while ( ~scanf("%d",&n) && n ) {for ( int i = 0 ; i < 2*n ; ++ i )scanf("%d%d",&P[i].x,&P[i].y);int flag = 1;for ( int A = -500 ; flag && A <= 500 ; ++ A )for ( int B = -500 ; flag && B <= 500 ; ++ B ) {int l = 0,r = 0;for ( int i = 0 ; i < 2*n ; ++ i ) {l += (A*P[i].x+B*P[i].y>0);r += (A*P[i].x+B*P[i].y<0);}if ( l == n && r == n ) {printf("%d %d\n",A,B);flag = 0;}}}return 0;}

0 0