当前位置: 代码迷 >> 综合 >> Uva - 11039 - Building designing
  详细解决方案

Uva - 11039 - Building designing

热度:81   发布时间:2024-01-10 13:31:25.0

题意:有n个绝对值不同的非0整数,问绝对值递增且正负交替的最长序列的长度(n <= 500000)。

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=457&problem=1980

——>>1、按绝对值大小排序;2、从负数开始求一次结果;3、从正数开始求一次结果;4、取两次结果的较大者。

#include <cstdio>
#include <algorithm>
#include <cmath>using namespace std;const int maxn = 500000 + 10;
int f[maxn];bool cmp(int a, int b){return abs(a) < abs(b);
}int main()
{int p, n, i;scanf("%d", &p);while(p--){scanf("%d", &n);for(i = 0; i < n; i++) scanf("%d", &f[i]);sort(f, f + n, cmp);int flag = 1, cnt = 0, Max = -1;for(i = 0; i < n; i++){if(f[i] * flag > 0) continue;cnt++;flag *= -1;}Max = max(Max, cnt);flag = -1;cnt = 0;for(i = 0; i < n; i++){if(f[i] * flag > 0) continue;cnt++;flag *= -1;}Max = max(Max, cnt);printf("%d\n", Max);}return 0;
}


  相关解决方案