UVA10167

题目的意思就是第一行输入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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值