UVA 11039 Building designing

来源:互联网 发布:acca伦敦大学硕士知乎 编辑:程序博客网 时间:2024/04/29 23:48

思路:把数列按绝对值从小到大排列,然后判断正负数相间的个数。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[500001];
bool cmp(int a,int b)
{
return abs(a)<abs(b);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int m,i,flag,ans=1;
scanf("%d",&m);
for(i=0;i<m;i++) scanf("%d",&a[i]);
sort(a,a+m,cmp);
if(a[0]>0) flag=1;
else flag=0;
for(i=0;i<m-1;i++)
{
if(flag==1&&a[i+1]<0)
{
flag=0;
ans++;
}
else if(flag==0&&a[i+1]>0)
{
flag=1;
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}

0 0