CF1130A Be Positive 题解

Content

有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试找出一个数 \(d\),使得数组中的每个数除以 \(d\) 得到的 \(n\) 个结果中至少有 \(\dfrac{n}{2}\) 个正数,输出任意一个 \(d\) 均可,或者没有这样的 \(d\)

数据范围:\(1\leqslant n\leqslant 100,-10^3\leqslant a_i\leqslant 10^3\)

Solution

先统计一下这里面有多少个正数和多少个负数。如果正数和负数的数量都没有到 \(\left\lceil\dfrac{n}{2}\right\rceil\) 的话就不存在这样的 \(d\),否则看正数和负数的数量哪个有 \(\left\lceil\dfrac{n}{2}\right\rceil\),如果是正数多除数就应该是正数,否则就应该是负数,这里随便输出什么都行能得到答案就好,我的代码中正数多输出的是 \(1\),负数多输出的是 \(-1\)

Code

int n, a[100007], pos, neg; 

int main() {
	getint(n);
	_for(i, 1, n) {
		getint(a[i]);
		pos += (a[i] > 0), neg += (a[i] < 0);
	}
	if(pos >= (n % 2 ? n / 2 + 1 : n / 2))	printf("1");
	else if(neg >= (n % 2 ? n / 2 + 1 : n / 2))	printf("-1");
	else	printf("0");
	return 0;
}
posted @ 2021-12-17 14:29  Eason_AC  阅读(40)  评论(0)    收藏  举报