UVA - 11039
|
题意:
有n个绝对值各不相等的非0整数,选择尽量多的数,排成一个序列,使得正负交替,且绝对值递增.输出其最大长度.
做法:
按绝对值从小到大排序,依次找过去.
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
int a[500005];
int n,m;
int cmp(int a,int b)
{
return abs(a)<abs(b);
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+m,cmp);
int ans = 1;
int flag;
if(a[0]<0)
flag=-1;
else
flag=1;
for(int i=1;i<m;i++)
{
if(a[i]*flag<0)
{
ans++;
flag=-flag;
}
}
printf("%d\n",ans);
}
return 0;
}


被折叠的 条评论
为什么被折叠?



