您的位置:首页 > 产品设计 > UI/UE

uva - 11039 - Building designing(qsort快排)

2014-02-03 21:13 204 查看
题意:水题,有n个绝对值各不相同的非0整数,选出尽量多的数排成一个序列,使得正负号交替且绝对值递增。输出最长序列长度。

方法:先用qsort按照绝对值递增排序,然后判断数组中后一个位置的数是不是和这个数符号相反,是的话加count加1。注意1.count开始为1;2.当n个数全为正或者全为负时输出确实应该是1,当时不确定,AC后确定了。

#define Local
#include <iostream>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>

using namespace std;

#define MAX 500000

int num[MAX];

int cmp(const void *a, const void *b)
{
	int m = abs(*(int *)a), n = abs(*(int *)b);
	return  m - n;
}

int main()
{
#ifdef Local
	freopen("a.in", "r", stdin);
	freopen("a.out", "w", stdout);
#endif
	int t = 0, n = 0;
	cin >> t;
	while (t--)
	{
		int count = 1;
		memset(num, 0, sizeof(num));
		cin >> n;
		int i = 0;
		for (i = 0; i < n; i++)
			cin >> num[i];
		qsort(num, n, sizeof(num[0]), cmp);
		for (i = 0; i < n-1; i++)
		{
			if (num[i] < 0 && num[i+1] > 0)
				count++;
			else if (num[i] > 0 && num[i+1] < 0)
				count++;
		}
		cout << count << endl;
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: