CF 1130A Be Positive

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011151784/article/details/87970818

A. Be Positive
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given an array of n integers: a1,a2,…,an. Your task is to find some non-zero integer d (−103≤d≤103) such that, after each number in the array is divided by d, the number of positive numbers that are presented in the array is greater than or equal to half of the array size (i.e., at least ⌈n2⌉). Note that those positive numbers do not need to be an integer (e.g., a 2.5 counts as a positive number). If there are multiple values of d that satisfy the condition, you may print any of them. In case that there is no such d, print a single integer 0.

Recall that ⌈x⌉ represents the smallest integer that is not less than x and that zero (0) is neither positive nor negative.

Input
The first line contains one integer n (1≤n≤100) — the number of elements in the array.

The second line contains n space-separated integers a1,a2,…,an (−103≤ai≤103).

Output
Print one integer d (−103≤d≤103 and d≠0) that satisfies the given condition. If there are multiple values of d that satisfy the condition, you may print any of them. In case that there is no such d, print a single integer 0.

Examples
inputCopy
5
10 0 -7 2 6
outputCopy
4
inputCopy
7
0 0 1 -1 0 0 2
outputCopy
0
Note
In the first sample, n=5, so we need at least ⌈52⌉=3 positive numbers after division. If d=4, the array after division is [2.5,0,−1.75,0.5,1.5], in which there are 3 positive numbers (namely: 2.5, 0.5, and 1.5).

In the second sample, there is no valid d, so 0 should be printed.

题目翻译:输入N个数,输出整数d,N个数除以d之后大于0的个数大于等于(n/2的向上取整)
题目思路:直接模拟,但是要考虑到这个d可以是负数,负数啊。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;
	cin >> n;
	int fi;
	if(n%2==0)fi = n/2;
	else fi = n/2+1;
	//int fi = ceil(n/2.0);
	int cnt = 0,uncnt = 0;
	for(int i = 0;i<n;i++)
	{
		int a;
		cin >> a;
		if(a>0)cnt++;
		else if(a<0) uncnt++;
	}
	if(cnt>=fi)cout<<2<<endl;
	else if(uncnt>=fi)cout<<-2<<endl;
	else cout<<0<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/u011151784/article/details/87970818
cf
今日推荐