uva11039(贪心)

来源:互联网 发布:红叶知弦h同人 编辑:程序博客网 时间:2024/06/13 06:23

题意:
要建一栋楼,要求越往上越小,并且相邻的楼层颜色不一样;
现在先给出样例数,每组样例给出有几个楼层,然后给出一个数字,正号代表蓝色,负号代表红色,绝对值是大小;问最高建几层;


思路:
按大小排序,从大到小判断这一层能不能就好,因为最优解肯定是每次都把大的能放的先放进去;

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int N = 500005;int n;struct fl {int color;int size;}f[N];int cmp(fl a , fl b) {return a.size > b.size;}int main() {int t;scanf("%d",&t);while(t--) {scanf("%d",&n);int temp;for(int i = 0; i < n; i++) {scanf("%d",&temp);f[i].size = fabs(temp);if(temp > 0)f[i].color = 1;elsef[i].color = -1;}sort(f , f + n , cmp);int cur = f[0].color;int ans = 1;for(int i = 1 ; i < n ;i++) {if(f[i].color != cur) {ans++;cur = -cur;}}printf("%d\n",ans);}}


0 0
原创粉丝点击