A. Be Positive
题目链接-A. Be Positive
题目大意
一个由
n
n
n个整数组成的数组,找到某个非零整数
d
d
d以便在数组中的每个数字除以
d
d
d后,数组中出现的正数的数量大于或等于数组大小的一半(
n
/
2
n/2
n/2向上取整)
解题思路
- 统计一下正数负数各自的个数即可,如果正数数目大于
n
/
2
n/2
n/2就输出
1
,如果负数数目大于 n / 2 n/2 n/2就输出-1
,否则输出0
- 坑点:不要想当然以为没有输出
0
的情况,当数组中存在多个 0 0 0时,必定不存在 d d d使条件成立 - 具体操作见代码
附上代码
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double e=exp(1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=2e5+10;
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ull;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,x=0,y=0;
cin>>n;
for(int i=1;i<=n;i++){
int t;
cin>>t;
if(t<0) x++;
if(t>0) y++;
}
n%2==0?n=n/2:n=n/2+1;
if(x>=n) cout<<-1<<endl;
else if(y>=n) cout<<1<<endl;
else cout<<0<<endl;
return 0;
}