细节有点多的思维题。
首先要知道,CF样例给你的一定不是你最容易从样例中找到样例所想要表达的样例的规律的(
别看上面那句话了(
显而易见,任何正数除以 1 都等于正数,而任何负数除以 -1 也都等于正数,所以本题就有一个很好玩的做法:记录负数、正数、0各有多少个,然后分情况讨论就好了。
具体来说:
- 如果 0 的个数大于 n/2 下取整,那么显然没有任何 (d) 满足条件(因为就算其他所有数除以 (d) 都为正数,也不到 (n) 的一半 );
- 如果不满足上面的条件,且正数个数要大于负数个数,那么有 (d=1) ;
- 如果不满足以上两个条件,那么 (d=-1) 。
其实也可以在条件2判断正数个数要大于等于负数个数
,都是一样的(因为正数个数等于负数个数无论去 (d=1 ext{or} d=-1) 均满足条件 )。
参考代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int z, f, l;
int main()
{
int n, s;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(x>0) z++;
if(x<0) f++;
if(x==0) l++;
}
s=n/2;
if(l>s) printf("0
");
else if(z>f) printf("1
");
else printf("-1
");
return 0;
}