UVa 11039 Building designing (求按绝对值升序最长正负交替数列长度)



UVA - 11039
Building designing
Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu

Submit Status

Description



题意:

有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;
}


你可能感兴趣的:(building,UVa11039,designing)